gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:11:39 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com