2017-02-20 64 views
0

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

搬运工运行-d --name itestRun -e LANG = en_UK.UTF-8-V 的/ etc /本地时间:在/ etc /本地时间:RO -v /股:/股: ž--network =宿主 --add主机= APPSERVER:127.0.0.1 --add主机=的localhost.localdomain:127.0.0.1 mytestimage CMD

心中已经发现映射(-e - > “Env”,mytestimage - >“Image”,CMD - >“Cmd”),但是其余参数有问题。

回答

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中,在刚开始使用docker exec的容器中打开一个新的sh会话。上面的例子使用my-docker作为容器名称,所以命令将会是;

docker exec -it my-docker sh 

内部的容器,你现在可以运行泊坞窗命令,并且为每个运行将在守护进程的其他shell中输出显示命令所做的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": {} 
}