【发布时间】:2021-09-13 18:45:16
【问题描述】:
第 1 节
我正在尝试在堆栈或服务中的一个容器上执行“exec”。我已按照此处提供的答案execute a command within docker swarm service 以及此处的官方 Docker 文档https://docs.docker.com/engine/swarm/secrets/ 进行操作,但似乎“docker 容器列表”及其变体(“docker ps”)似乎没有找到“docker”中列出的任何容器服务列表”。
请参阅下面来自https://docs.docker.com/engine/swarm/secrets/ 的示例,该示例旨在在服务容器上使用“exec”。
1)
printf "This is a secret" | docker secret create my_secret_data -
docker service create --name redis --secret my_secret_data redis:alpine
docker service ps redis
收益ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 75olesuh9n4h redis.1 redis:alpine virt-05 Running Running 16 minutes ago
- 以下两个命令为“redis”返回零记录
docker ps --filter name=redis -q
docker container list
下面的两个命令没有返回“redis”的记录,因此下面的命令一定不起作用。
docker container exec $(docker ps --filter name=redis -q) ls -l /run/secrets
docker container exec $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data
在我的环境中可能有什么不同,导致无法重现上面示例中的结果 (https://docs.docker.com/engine/swarm/secrets/)
我的环境如下
$ uname -r
4.18.0-338.el8.x86_64
$ docker version
Client: Docker Engine - Community
Version: 20.10.8
API version: 1.41
Go version: go1.16.6
Git commit: 3967b7d
Built: Fri Jul 30 19:53:39 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.8
API version: 1.41 (minimum version 1.12)
Go version: go1.16.6
Git commit: 75249d8
Built: Fri Jul 30 19:52:00 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.9
GitCommit: e25210fe30a0a703442421b0f60afac609f950a3
runc:
Version: 1.0.1
GitCommit: v1.0.1-0-g4144b63
docker-init:
Version: 0.19.0
GitCommit: de40ad0
第 2 节
我刚刚在另一个节点上初始化了一个 docker swam,我能够成功地重现示例 https://docs.docker.com/engine/swarm/secrets/ 的行为。
在第二个环境中,docker ps 能够找到(列出)作为服务启动的 redis 容器。 下面的命令返回一条记录。
docker ps --filter name=redis -q
3de724329171
通过运行以下命令,我能够在此容器上成功运行“exec”
docker container exec $(docker ps --filter name=redis -q) ls -l /run/secrets
docker container exec $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data
如果下面给出第二个环境的 docker 版本
$ uname -r
3.10.0-1160.36.2.el7.x86_64
docker version
Client: Docker Engine - Community
Version: 20.10.8
API version: 1.41
Go version: go1.16.6
Git commit: 3967b7d
Built: Fri Jul 30 19:55:49 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.8
API version: 1.41 (minimum version 1.12)
Go version: go1.16.6
Git commit: 75249d8
Built: Fri Jul 30 19:54:13 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.9
GitCommit: e25210fe30a0a703442421b0f60afac609f950a3
runc:
Version: 1.0.1
GitCommit: v1.0.1-0-g4144b63
docker-init:
Version: 0.19.0
GitCommit: de40ad0
【问题讨论】:
-
从您的问题中不清楚您是在集群模式下运行单节点,还是在运行多节点 docker swarm。在多节点 docker swarm 的情况下,可以将容器安排在与您所在的节点不同的节点上,您需要更改为它或远程访问它
-
@Chris Becke 谢谢你的建议。 Section 1 中的 swarm 设置是多节点设置,而 Section 2 中的 swarm 设置是单节点(manager/worker)设置。第 1 节中的容器被分派到一个工作节点,而不是我试图向其发出 exec 命令的那个。一旦我登录到工作节点,我就能够在服务容器上成功运行“exec”命令。
标签: docker docker-swarm