【问题标题】:Running specific container on predefined host with docker stack使用 docker stack 在预定义主机上运行特定容器
【发布时间】:2021-09-07 15:46:45
【问题描述】:

我花了很多时间试图弄清楚以下场景,但到目前为止还没有运气。就是这样。

我有 2 台机器(机器 A 的 IP 为 123,机器 B 的 IP 为 456),123 是管理节点,456 是工作节点。 现在我要运行 2 个服务,分别是 IP-123 上的 Service-A 和 IP 456 上的 Service-B,因为我正在使用以下 compose 文件

version: '3.8'
networks:
  same-network:
ser1-service:
  container_name: ser1-service
  image: ser1
  networks:
    - same-network
  ports:
    - 9057:7057
  entrypoint: ["java","-jar","ser1.jar"]
ser2-service:
  container_name: ser2-service
  image: ser2
  networks:
    - same-network
  ports:
    - 9052:7052
  entrypoint: ["java","-jar","ser2.jar"]

现在,当我使用 docker stack deploy 启动它时,它会随机部署服务。我想要的是,确保每次 Service-A 都应该部署在 IP-123 上,而 Service-B 应该部署在 IP 456 上

只是为了添加一件事,我已经在两台服务器上下载了这两个图像。原因是,在实际场景中,我们有很多服务和很多主机,它们之间存在硬绑定。此外,我希望在每个工作节点的运行时下载图像。 任何人的任何帮助都将受到高度赞赏。

【问题讨论】:

    标签: docker-compose docker-swarm docker-stack


    【解决方案1】:

    第一个问题(确保服务 A 访问 IP 123)- 我可以建议的最接近的方法是在您的堆栈文件中添加一个带有放置约束的部署部分。可用的放置约束之一是主机名,它可能足够接近(尽管不完全是 IP 地址)。另一个可行的放置约束是节点标签(您将自己添加到节点中)。

    第二个问题我认为您要确保每次都下载图像(尽管由于措辞有点不确定)-我相信您希望 docker 堆栈上的“--resolve-image=always”标志部署命令:

    https://docs.docker.com/engine/reference/commandline/stack_deploy/

    --resolve-image 始终 API 1.30+Swarm 查询注册表以解析图像摘要和支持的平台(“always”|“changed”|“never”)

    docker stack deploy -c your_stack_file.yml --resolve-image=always your_stack_name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多