如何使用REST API设置Docker容器的名称

我正在尝试通过REST API创build和启动一个容器。 也就是说,使用以下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 

用于创build容器的文档( 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中。

从文档(在您链接的页面上):

查询参数:

名称 – 将指定的名称分配给容器。 必须匹配/?[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本身交谈。

在一个terminal:

 socat -t100 -v UNIX-LISTEN:/tmp/proxysocket.sock,mode=644,reuseaddr,fork UNIX-CONNECT:/var/run/docker.sock 

而在另一个terminal:

 export DOCKER_HOST="unix:///tmp/proxysocket.sock" docker run -ti --name=test ubuntu:14.04 /bin/bash 

你可以在第一个terminal的输出中看到:

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

接受编码:gzip \ r