如何使用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