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

标签 docker

我正在尝试通过 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/

相关文章:

scala - 如何对我的Play Scala应用进行docker化?

emacs - 非交互式docker中的哑终端

ember.js - Ember CLI构建被杀死

wordpress - 更改 Docker nginx 和 Wordpress 上传限制

docker - 如何在 Kubernetes 中将用于容器的 Docker 镜像的摘要作为环境变量传递

networking - CentOS 上的 Docker 与 LAN 网络的桥接

Docker 端口转发不正确?

docker - 将命令从 docker 容器公开到主 shell

docker - 为什么由WORKDIR创建的文件夹由root而不是USER拥有

postgresql - 如何以非root用户身份在docker中运行postgres?