首页 > 解决方案 > Docker Swarm:docker stack 在未标记的图像上部署结果

问题描述

我正在使用docker swarm mode主机将一些图像从我的注册表部署到我的应用程序服务器中:

我在注册表中的图像看起来像这样(正在执行docker images):

REPOSITORY                                                 TAG                   IMAGE ID            CREATED            SIZE
localhost:5000/myApp                                       G02R00C09_myTag   c1fc2242f9a0        2 hours ago         272MB

我的 docker compose 文件下,我的服务如下所示:

---
version: '3.4'
services:
  ihm:
    image: myRegistryServer:5000/myApp:G02R00C09_myTag   
    stdin_open: true
    volumes:
    - /opt/logs:/opt/logs
    tty: true
    ports:
      - target: 80
        published: 80
        protocol: tcp
        mode: host
    deploy:
      mode: global
      placement:
        constraints:
          - node.labels.type == abc
    healthcheck:
      disable: true

->执行后docker stack deploy

我的堆栈和服务运行良好(当我运行时docker stack lsdocker service ls一切正常)

->但是在运行时docker images,我确实得到了我的图像,但带有 <none> 标签

image:  myRegistryServer:5000/myApp      <none> 

标签: dockerdocker-composedockerfiledocker-swarmdocker-registry

解决方案


这个是正常的。使用 Swarm Stacks 时,它会将您的标签转换为该图像的 SHA256 并下载该特定 ID。这保证了每个节点都有相同的图像。如果它只依赖于标签,您可能会在 a 中重复使用标签docker push,并且不同的节点可能会下载不同的图像。

您可以看到在 adocker service lsdocker stack ps <stackname>


推荐阅读