34

我正在使用 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即没有 swarm 模式)一切正常,服务启动。

我真的不明白为什么这会失败?我已经尝试使用清理docker system prunedocker 然后重新拉取我的图像,但没有成功。

4

3 回答 3

50

已经找到解决方案。我的图像托管在私人存储库中。除了 swarm manager(我在其中执行命令)之外,我还有一个正在运行的 swarm worker。

当我运行docker stack deploy -c docker-compose.yml myappdocker 时,将服务部署到工作节点(而不是我认为的管理节点)。在工作节点上,docker 没有凭据可以从私有存储库中提取映像。因此,要解决此问题,要么传递标志--with-registry-auth(将存储库的凭据推送到工作节点),要么确保将服务部署到存在映像的节点。

请参阅:https ://docs.docker.com/engine/reference/commandline/deploy/

于 2017-11-24T09:50:27.183 回答
3

我想添加另一个导致相同结果(错误消息)的场景,这样人们就不会把头撞到墙上。

另一种可能性是您尝试使用不安全的注册表部署映像,但忘记daemon.json在拉取映像的服务器上进行编辑。

如果是这样,让这个答案作为提醒;并为您节省一些时间。

于 2020-12-23T16:32:06.733 回答
0

在公司防火墙后面时,我在 mac 上遇到了类似的问题。

我只有在直接连接到互联网后才能解决。

只是为了更新,当我在 VPN 上时,我可以在没有任何代理设置的情况下访问互联网,并且能够使用docker run. 问题仅与docker-compose.

我确实尝试在我的 VM 的 resolv.conf 中将名称服务器更改为 8.8.8.8,但问题没有解决。

于 2019-07-30T09:59:41.357 回答