Docker Container Creation - mapping from CLI



我必须从命令行接口(CLI)调用到远程REST API(Docker Engine API)调用docker容器的自动创建,但是我有问题可以找到相应的问题请求身体参数。我的CLI电话是:

docker run -d -name itestrun -e lang = en_uk.utf -8 -v /etc/localtime:/etc/localtime:ro -v/share:/share:z -network =主机 -add-host = appserver:127.0.0.1 -add-host = localhost.localdomain:127.0.0.1 myTestimage cmd

我找到了映射(-e->" env",myTestImage->" image",cmd->" cmd"),但剩余参数有问题。

Docker CLI还使用API与守护程序进行通信。找出CLI提出的请求的一种简单方法是在调试模式下运行守护程序,该模式将在守护程序日志中记录API。

如果您不想在调试模式下运行常规守护程序,则可以使用docker-in-in-indocker。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 。在该外壳中,在您刚开始使用docker exec的容器中打开一个新的sh会话。上面的示例使用my-docker作为容器名称,因此命令将为;

docker exec -it my-docker sh

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

例如,运行;

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": {}
}

最新更新