我正在尝试通过 REST API 创建并启动容器。即使用以下 API:
curl --http1.0 --request POST --header "Content-Type: application.json" http://$DOCKER_HOST:4243/containers/create --data @create.json
其中 create.json 是所需属性的 JSON 文件。我想为容器指定一个特定的名称。可以通过 docker CLI 使用运行命令上的 --name 参数来完成此操作:
docker run --name "my_name" my_image
创建容器 ( https://docs.docker.com/reference/api/docker_remote_api_v1.15/#create-a-container ) 的文档提供了示例 JSON 负载。未列出名称属性。我尝试了名称属性的以下变体:
"Name": "my_name"
"Names": [ "my_name" ]
"Names": [ "/my_name" ]
"Name": "/my_name"
一切都无济于事。这些变化的灵感来自于查询结果:
curl --http1.0 http://$DOCKER_HOST:4243/containers/json
返回的条目包括:
"Names":["/elegant_mccarthy"]
最佳答案
您将 name
作为查询参数包含在内,而不是在 JSON 中。
来自文档(在您链接的页面上):
Query Parameters:
name – Assign the specified name to the container. Must match /?[a-zA-Z0-9_-]+.
所以可能是这样的:
curl --http1.0 --request POST --header "Content-Type: application.json" http://$DOCKER_HOST:4243/containers/create?name=your-name --data @create.json
如有疑问:
您可以使用socat位于 Docker CLI 调用和用于与守护进程通信的 unix 套接字之间,以准确了解使用 docker
客户端时发生的情况,因为它只与 API 本身通信。
在一个终端中:
socat -t100 -v UNIX-LISTEN:/tmp/proxysocket.sock,mode=644,reuseaddr,fork UNIX-CONNECT:/var/run/docker.sock
在另一个终端中:
export DOCKER_HOST="unix:///tmp/proxysocket.sock"
docker run -ti --name=test ubuntu:14.04 /bin/bash
您将能够在第一个终端的输出中看到:
2014/10/26 02:20:15.176744 length=564 from=0 to=563
POST /v1.15/containers/create?name=test HTTP/1.1\r
Host: /tmp/proxysocket.sock\r
User-Agent: Docker-Client/1.2.0-dev\r
Content-Length: 370\r
Content-Type: application/json\r
Accept-Encoding: gzip\r
关于docker - 如何使用 REST API 设置 Docker 容器的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26556329/