我必须从命令行接口(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": {}
}