我正在尝试通过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属性尝试了以下变体:
"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本身进行通信。
在一个终端中:
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长度= 564从= 0到= 563
POST /v1.15/containers/create?name=test HTTP / 1.1 \ r
主机:/tmp/proxysocket.sock \ r
用户代理:Docker-Client / 1.2.0-dev \ r
内容长度:370 \ r
内容类型:application / json \ r
接受编码:gzip \ r
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句