【问题标题】:Docker Container Creation - mapping from CLIDocker 容器创建 - 从 CLI 映射
【发布时间】:2017-02-20 20:37:09
【问题描述】:

我必须将 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"),但其余参数有问题。

【问题讨论】:

    标签: docker


    【解决方案1】:

    docker CLI 也使用 API 与守护进程通信。找出 CLI 发出了哪些请求的一种简单方法是在调试模式下运行守护程序,这会将 API 调用记录在守护程序日志中。

    如果您不想在调试模式下运行常规守护程序,可以使用 docker-in-docker。 Docker Hub (https://hub.docker.com/_/docker/) 上的官方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 调用将显示在您的另一个 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": {}
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-14
      • 2017-08-02
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多