docker 堆栈部署结果 "No such image error"
docker stack deploy results in "No such image error"
我正在使用 docker swarm 并且想使用 docker-compose
部署服务。我的服务使用名为 myuser/myrepo:mytag
的自定义映像,我成功将其部署到 Docker-Hub 到私有存储库。
我的 docker-compose 看起来像这样:
version: "3.3"
services:
myservice:
image: myuser/myrepo:mytag
ports:
- "8080:8080"
执行前,我成功拉取镜像:docker pull myuser/myrepo:mytag
当我 运行 docker stack deploy -c docker-compose.yml myapp
我总是收到错误:"No such image: myuser/myrepo:mytag"
.
有趣的是,运行仅使用以下方式连接同一个文件:docker-compose up
(即没有群模式)一切正常,服务启动。
我真的不明白为什么会失败?
我已经尝试用 docker system prune
清理 docker,然后撤回我的图像,但没有成功。
已经找到解决方案。
我的图像托管在私人存储库中。
除了 swarm manager(我执行命令的地方)之外,我还有一个 运行 swarm worker。
当我运行 docker stack deploy -c docker-compose.yml myapp
docker 将服务部署到工作节点(不是我想的管理器节点)。
在工作节点上,docker 没有从私有存储库中提取图像的凭据。
因此,要解决此问题,要么传递标志 --with-registry-auth
(将存储库的凭据推送到工作节点),要么确保将服务部署到存在图像的节点。
参见:https://docs.docker.com/engine/reference/commandline/deploy/
我在公司防火墙后的 mac 上遇到了类似的问题。
我是直接连上网络才解决的
只是为了更新,当我在 VPN 上时,我可以在没有任何代理设置的情况下访问互联网,并且可以使用 docker run
下载 (docker) 图片。问题仅存在于 docker-compose
.
我曾尝试在我的虚拟机 resolv.conf 中将名称服务器更改为 8.8.8.8,但问题并未解决。
我想添加另一个导致相同结果(错误消息)的场景,这样人们就不会用头撞墙了。
另一种可能是您尝试使用 insecure registry 部署映像,但忘记在拉取映像的服务器上编辑 daemon.json
。
如果是这种情况,让这个答案作为一个提醒;并为您节省一些时间。
对我来说,我在部署到我在 swarm 中配置的新注册表的图像时遇到了困难。我正在使用 Portainer 更新堆栈。
我在所有节点上配置了所有必要的证书和登录名,并验证我已经使用以下命令上传了图像:
curl -X GET https://myregistry:5000/v2/_catalog
curl -X GET https://myregistry:5000/v2/{image}/tags/list
无论我怎样尝试,我总是在服务实例上显示“没有这样的图像”错误。
在最后一次尝试中,我创建了一个服务(没有撰写文件),使用与我之前使用的完全相同的 URL 作为我的图像并且它有效,即 docker 找到了图像并且开始服务了!进一步尝试使用撰写文件然后对这个和所有其他新图像正常工作。
奇怪。
我正在使用 docker swarm 并且想使用 docker-compose
部署服务。我的服务使用名为 myuser/myrepo:mytag
的自定义映像,我成功将其部署到 Docker-Hub 到私有存储库。
我的 docker-compose 看起来像这样:
version: "3.3"
services:
myservice:
image: myuser/myrepo:mytag
ports:
- "8080:8080"
执行前,我成功拉取镜像:docker pull myuser/myrepo:mytag
当我 运行 docker stack deploy -c docker-compose.yml myapp
我总是收到错误:"No such image: myuser/myrepo:mytag"
.
有趣的是,运行仅使用以下方式连接同一个文件:docker-compose up
(即没有群模式)一切正常,服务启动。
我真的不明白为什么会失败?
我已经尝试用 docker system prune
清理 docker,然后撤回我的图像,但没有成功。
已经找到解决方案。 我的图像托管在私人存储库中。 除了 swarm manager(我执行命令的地方)之外,我还有一个 运行 swarm worker。
当我运行 docker stack deploy -c docker-compose.yml myapp
docker 将服务部署到工作节点(不是我想的管理器节点)。
在工作节点上,docker 没有从私有存储库中提取图像的凭据。
因此,要解决此问题,要么传递标志 --with-registry-auth
(将存储库的凭据推送到工作节点),要么确保将服务部署到存在图像的节点。
参见:https://docs.docker.com/engine/reference/commandline/deploy/
我在公司防火墙后的 mac 上遇到了类似的问题。
我是直接连上网络才解决的
只是为了更新,当我在 VPN 上时,我可以在没有任何代理设置的情况下访问互联网,并且可以使用 docker run
下载 (docker) 图片。问题仅存在于 docker-compose
.
我曾尝试在我的虚拟机 resolv.conf 中将名称服务器更改为 8.8.8.8,但问题并未解决。
我想添加另一个导致相同结果(错误消息)的场景,这样人们就不会用头撞墙了。
另一种可能是您尝试使用 insecure registry 部署映像,但忘记在拉取映像的服务器上编辑 daemon.json
。
如果是这种情况,让这个答案作为一个提醒;并为您节省一些时间。
对我来说,我在部署到我在 swarm 中配置的新注册表的图像时遇到了困难。我正在使用 Portainer 更新堆栈。
我在所有节点上配置了所有必要的证书和登录名,并验证我已经使用以下命令上传了图像:
curl -X GET https://myregistry:5000/v2/_catalog curl -X GET https://myregistry:5000/v2/{image}/tags/list
无论我怎样尝试,我总是在服务实例上显示“没有这样的图像”错误。
在最后一次尝试中,我创建了一个服务(没有撰写文件),使用与我之前使用的完全相同的 URL 作为我的图像并且它有效,即 docker 找到了图像并且开始服务了!进一步尝试使用撰写文件然后对这个和所有其他新图像正常工作。
奇怪。