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 找到了图像并且开始服务了!进一步尝试使用撰写文件然后对这个和所有其他新图像正常工作。

奇怪。