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,添加:
然后重启Docker服务:{ "insecure-registries": ["192.168.99.100:5000"] }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
相关产品推荐
相关产品推荐

