There is a long standing issue for this task. The logs looks like: 10.255.0.2 - - [15/Mar/2018:15:32:15 +0000] “GET / HTTP/2.0” 200
One of the solutions, from the issue’s comments, is to run a service in the host mode, the swarm load balancing for this service will not work. But if there is a load balancer behind the swarm cluster, it seems not a big problem.
For example, the configuration can be like this: an external load balancer -> nginx proxy service -> backend service.
The nginx can be restarted with a such command:
docker service update --publish-rm 443:443 --publish-add "mode=host,target=443,published=443" --force yourapp_nginx
The network_mode: “host” in docker-compose file is ignored when deploying in docker swarm.