Docker Swarm下docker ps找不到服务容器无法执行exec命令问题咨询
根因分析
- 核心差异为集群部署架构不同:第一个异常环境是多节点Docker Swarm集群,你执行
docker ps命令的节点并非服务实际运行的节点。从你提供的docker service ps redis返回结果可明确看到,redis服务实例调度到了virt-05节点运行,若你当前操作的是Swarm管理节点而非virt-05节点,本地自然无法查询到该容器。 - 额外验证:可执行
docker node ls查看集群节点配置,若管理节点的AVAILABILITY列为drain,说明管理节点本身被设置为不承载业务容器,所有服务都会调度到工作节点运行,这也是管理节点看不到业务容器的常见配置。 - 第二个正常环境为单节点Swarm集群,初始化Swarm的节点同时承担管理节点和工作节点角色,服务直接调度到本地运行,因此执行
docker ps可以直接查询到容器。
解决方案
方案1:登录对应节点操作
直接登录virt-05节点执行相关命令,即可正常查询到容器并执行exec操作:
# virt-05节点上执行 docker ps --filter name=redis -q 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
方案2:管理节点直接执行exec
无需切换节点,可直接在管理节点通过服务实例ID执行exec操作:
# 查询运行中的服务实例ID docker service ps -q -f desired-state=running redis # 直接执行命令,替换<实例ID>为上一步查询到的结果 docker exec <实例ID> ls -l /run/secrets docker exec <实例ID> cat /run/secrets/my_secret_data
内容的提问来源于stack exchange,提问作者Allan K
相关产品推荐
相关产品推荐

