I am trying to make combination of docker + consul + traefik from last several days and it doesn't seem to be working. I am at a point where I just don't know what I am missing in my configuration.
My docker host IP address is: 192.168.30.12
I created a bridge network called
consulwhich has a subnet of 172.28.0.0/16
Here is my docker compose for consul (for simplicity, I am running just one consul server so that I can debug an issue)
services: consul-server: container_name: consul-server-bootstrap image: consul:latest networks: - consul ports: - 8400:8400 - 8500:8500 - 53:8600 - 53:8600/udp command: agent -server -bootstrap -ui -node=consul-server -client=0.0.0.0 -advertise=192.168.30.12 -recursor=22.214.171.124 restart: unless-stopped
I am using registrator to register service to the consul. Here is docker compose for that service:
registrator: image: gliderlabs/registrator:latest volumes: - /var/run/docker.sock:/tmp/docker.sock container_name: consul-registrator restart: unless-stopped command: consul://consul-server-bootstrap:8500 networks: - consul
Here is my traefik docker compose section
reverse-proxy: container_name: traefik image: traefik:v2.9 networks: - consul command: --api.insecure=true --providers.consulcatalog=true --providers.consulcatalog.prefix=traefik --providers.consulcatalog.endpoint.address=http://192.168.30.12:8500 ports: - "80:80" - "8080:8080"
Here is whoami container that I am registering with consul
whoami: # A container that exposes an API to show its IP address image: traefik/whoami networks: - consul restart: unless-stopped environment: - SERVICE_TAGS=whoami - SERVICE_NAME=whoami - SERVICE_80_ID=whoami ports: - "80" labels: - traefik.enable=true - traefik.backend=whoami - traefik.port=80 - traefik.default.protocol=http - traefik.http.routers.whoami.rule=Host(`whoami`)
When I visit http://192.168.30.12:8500, I see that whoami is registered with consul as seen below:
I see whoami on traefik dashboard as well when I visit http://192.168.30.12:8080
I also run dig command
dig @127.0.0.1 whoami.service.consul on my docker host and that also can discover the service just fine as seen below:
; <<>> DiG 9.11.36-RedHat-9.11.36-5.el8_7.2 <<>> @127.0.0.1 whoami.service.consul ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5913 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;whoami.service.consul. IN A ;; ANSWER SECTION: whoami.service.consul. 0 IN A 172.28.0.4 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Feb 17 10:15:05 CST 2023 ;; MSG SIZE rcvd: 66
I made a host entry on my other computer as seen below
When I try to visit http://whoami in browser, I get
Bad Gateway error.
I want to register new containers to consul using registrator and than add it to the traefik load balancer using service tags and then consume those service from outside of my docker host.
Can someone please point me where I am making mistake? I have spent several days on it to make it work.