我正在尝试通过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使用run命令中的--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"]
答案 0 :(得分:9)
您包含name
作为查询参数,而不是JSON。
从文档(在您链接的页面上):
查询参数:
name - 将指定的名称分配给容器。必须匹配/?[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
主持人:/tmp/proxysocket.sock \ r
User-Agent:Docker-Client / 1.2.0-dev \ r
内容长度:370 \ r
Content-Type:application / json \ r
Accept-Encoding:gzip \ r