Docker Swarm 使用主机网络更新服务

Jul*_*tte 5 docker docker-compose docker-swarm docker-network docker-stack

我有一个 docker swarm,目前只有一个节点和几个堆栈。为了能够获取请求我的一项服务的客户端的 IP 地址,我将一项服务上的端口切换为模式:主机。除非我想更新该服务,否则这工作正常。我没有更改部署顺序,因此它应该是默认的“停止优先”,但是当我使用任务时stack deploy,任务失败并显示以下消息:

no suitable node (host-mode port already in use on 1 node)
Run Code Online (Sandbox Code Playgroud)

当我将服务缩小到 0 然后使用stack deploy它时,它可以正常工作,但我不明白为什么直接更新时会出现问题。“stop-first”不应该意味着先终止旧服务(释放端口),然后启动新服务吗?如何在部署更改之前更改 yml 而不必缩放到 0?

这是有问题的 application.yml:

version: "3.7"

services:
  myservice:
    image: myrepo/gateway
  ports:
    - mode: host
      protocol: tc
      published: 443
      target: 443
  networks:
    - gateway_net

networks:
  gateway_net:
    external: true # was created with 'docker network create -d overlay gateway_net', is used to connect gw with other services
Run Code Online (Sandbox Code Playgroud)