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

Docker私有仓库使用方法及Swarm工作节点部署失败问题求助

解决Docker Swarm工作节点无法拉取私有镜像仓库镜像的问题

从你给出的报错和操作流程来看,这个问题核心是Swarm工作节点无法正确识别或访问你的私有镜像仓库,咱们一步步拆解排查:

1. 先检查镜像标签的格式(最可能的原因)

报错里的No such image: 192.168.99.100说明Swarm把仓库IP当成了镜像名,这明显是你执行docker tag时格式不对。正确的私有镜像标签必须包含仓库IP+端口,格式应该是:

docker tag 本地镜像名:版本 192.168.99.100:5000/你的镜像名:版本

推送到仓库时也要用这个完整标签:

docker push 192.168.99.100:5000/你的镜像名:版本

部署Swarm服务时同样要写全地址:

docker service create --name 你的服务名 192.168.99.100:5000/你的镜像名:版本

2. 确认工作节点能访问私有仓库

在每个Swarm工作节点上执行以下命令,测试网络连通性:

curl http://192.168.99.100:5000/v2/_catalog

如果返回类似{"repositories":["你的镜像名"]}的JSON,说明网络没问题;如果超时或报错,要检查:

  • 仓库所在机器的防火墙是否开放了5000端口
  • Docker仓库容器的端口映射是否正确(你执行的docker run -d -p 5000:5000 --name registry registry:2是对的,但要确保容器正常运行,用docker ps查看)
  • 工作节点和仓库机器是否在同一网络,路由是否通畅

3. 配置工作节点信任非HTTPS私有仓库

Docker默认拒绝从非HTTPS的私有仓库拉取镜像(localhost除外),所以必须让每个工作节点信任这个仓库:

  • Linux节点:编辑/etc/docker/daemon.json,添加:
    {
      "insecure-registries": ["192.168.99.100:5000"]
    }
    
    然后重启Docker服务:
    systemctl restart docker
    
  • Docker Machine节点(比如Toolbox环境):先通过docker-machine ssh 工作节点名进入节点,再执行上述修改配置和重启的操作。

4. 确认镜像已成功推送到仓库

在管理节点上执行以下命令,验证镜像是否存在于仓库中:

curl http://192.168.99.100:5000/v2/你的镜像名/tags/list

如果能看到你推送的版本标签,说明镜像上传成功;如果看不到,重新执行docker push确保推送完成。

最后补充:如果仓库在Swarm集群内

如果你的私有仓库是部署在Swarm集群的某个节点上,建议把仓库容器加入Swarm的overlay网络,这样集群内节点可以通过服务名访问,无需依赖IP,稳定性更高:

# 创建overlay网络
docker network create --driver overlay registry-net
# 启动仓库时加入网络
docker run -d -p 5000:5000 --name registry --network registry-net registry:2

按照这个流程排查,大概率能解决你的问题。

内容的提问来源于stack exchange,提问作者Chloe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:16:54