Docker容器创建 - 从CLI映射

时间:2017-02-20 08:34:45

标签: docker

我必须将Docker容器的自动创建从命令行界面(CLI)调用迁移到远程REST API(Docker Engine API)调用,但是我在查找相应的请求主体参数时遇到问题。我的CLI调用是:

  

docker run -d --name itestRun -e LANG = en_UK.UTF-8 -v   / etc / localtime:/ etc / localtime:ro -v / share:/ share:Z --network = host   --add-host = APPSERVER:127.0.0.1 --add-host = localhost.localdomain:127.0.0.1 mytestimage CMD

我找到了映射(-e - >" Env",mytestimage - >" Image",CMD - >" Cmd&#34 ;),但其余参数有问题。

1 个答案:

答案 0 :(得分:0)

docker CLI还使用API​​与守护进程通信。查找CLI发出哪些请求的简单方法是以调试模式运行守护程序,该守护程序将在守护程序日志中记录API调用。

如果您不想在调试模式下运行常规守护程序,可以使用docker-in-docker。 Docker Hub上的官方docker图像(https://hub.docker.com/_/docker/)可用于此目的。

例如,要查看对Docker 1.13.1守护程序的请求;

首先,使用docker 1.13.1启动容器;以交互模式启动容器,并提供sh作为主命令(这使得它更容易一些);

docker run -it --rm \
  -v /var/lib/docker \
  --privileged \
  --name my-docker \
  docker:1.13.1 \
  sh

在容器内,在前台启动守护进程(dockerd);

dockerd --debug --iptables=false

你会看到守护进程启动;

DEBU[0000] Listener created for HTTP on unix (/var/run/docker.sock)
INFO[0000] libcontainerd: new containerd process, pid: 16
DEBU[0000] containerd: read past events                  count=0
...
...
DEBU[0001] Registering POST, /networks/prune
DEBU[0001] Registering DELETE, /networks/{id:.*}
INFO[0001] API listen on /var/run/docker.sock

守护程序运行后,打开一个新的shell 。在该shell中,在刚开始使用sh的容器中打开一个新的docker exec会话。上面的示例使用my-docker作为容器名称,因此命令将是;

docker exec -it my-docker sh

在该容器内,您现在可以运行docker命令,并且为您运行的每个命令进行的API调用将显示在您的其他shell中的守护程序的输出中。

例如,正在运行;

docker network create foobar

在守护程序日志中显示为;

DEBU[0304] Calling GET /_ping
DEBU[0304] Calling POST /v1.26/networks/create
DEBU[0304] form data: {"Attachable":false,"CheckDuplicate":true,"Driver":"bridge","EnableIPv6":false,"IPAM":{"Config":[],"Driver":"default","Options":{}},"Internal":false,"Labels":{},"Name":"foobar","Options":{}}

API调用的主体在form data:之后打印,并且是;

{
  "Attachable": false,
  "CheckDuplicate": true,
  "Driver": "bridge",
  "EnableIPv6": false,
  "IPAM": {
    "Config": [],
    "Driver": "default",
    "Options": {}
  },
  "Internal": false,
  "Labels": {},
  "Name": "foobar",
  "Options": {}
}
相关问题