You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:24:04