I'm converting my docker-compose setup to docker swarm mode and I've stumbled upon a problem with how traefik and Docker Swarm mode work together.
With the following compose file deployed through
docker stack deploy I'm getting HTTP 504 when trying to reach the frontend through the configured rule (e.g.
curl -v -H "Host: example.org" http://localhost:80)
version: "3" services: cats: image: mikesir87/cats deploy: labels: traefik.frontend.rule: Host:example.org traefik.port: 5000 traefik.docker.network: cats_default
The following is the output from
docker network ls:
NETWORK ID NAME DRIVER SCOPE bd4cbc4aa998 bridge bridge local vg5aw0ghg5kg cats_default overlay swarm 69a725b8a78b docker_gwbridge bridge local 006701173ca0 host host local p4ljq12j2htg ingress overlay swarm fc3838c62a62 none null local
The traefik.toml is largely unchanged from when I hosted things using docker-compose (which worked fine), apart from setting swarmMode=true.
The docker section of traefik.toml:
[docker] endpoint = "unix:///var/run/docker.sock" swarmMode = true watch = true useBindPortIP = true
I tried enabling useBindPortIP, but it always logs the following:
"Unable to find a binding for container \"cats_cats.1\", falling back on its internal IP/Port. In other words, disabling it does not change anything.
All examples I've seen on how to set up Docker Swarm mode and traefik use traefik in the same compose file and make sure they share the same internal docker network, but I can't find anything about this being required in the documentation.
$ docker version Client: Docker Engine - Community Version: 19.03.2 API version: 1.39 (downgraded from 1.40) Go version: go1.12.8 Git commit: 6a30dfc Built: Thu Aug 29 05:29:29 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.1 API version: 1.39 (minimum version 1.12) Go version: go1.10.6 Git commit: 4c52b90 Built: Wed Jan 9 19:02:44 2019 OS/Arch: linux/amd64 Experimental: false
$ traefik version Version: v1.7.10 Codename: maroilles Go version: go1.11.6 Built: 2019-03-29_12:20:34PM OS/Arch: linux/amd64
So my first question would be: Is it possible to run traefik against the Docker Swarm mode endpoint when traefik itself does not run inside Docker?
If that should be possible, what could be wrong in my setup?
I'm happy to provide more information if that's required.