lucaslorentz / caddy-docker-proxy

Caddy as a reverse proxy for Docker
MIT License
2.61k stars 163 forks source link

"Container is not in same network as caddy" even tho they are #601

Closed djkato closed 3 months ago

djkato commented 3 months ago

Hello, I can't get caddy to work with my services. I have multiple networks in my docker-compose, could that be an issue?

Running the compose, I can check that all of my public services/containers actually are on the same network:

caddy-1                  | {"level":"warn","ts":1711396807.90559,"logger":"docker-proxy","msg":"Container is not in same network as caddy","container":"9ec0059217d0f220ba2e0a6f956e15ed6108a9557c965391782006285004c927","container id":"9ec0059217d0f220ba2e0a6f956e15ed6108a9557c965391782006285004c927"}

╭─kremik@kremik in repo: kremik-sk on  master [x!?]
╰─λ sudo docker inspect kremik-sk_caddy | grep "9ec0059217d0f220ba2e0a6f956e15ed6108a9557c965391782006285004c927"
"9ec0059217d0f220ba2e0a6f956e15ed6108a9557c965391782006285004c927": {

Yet caddy reports that there isn't a single container on the same network as caddy. Do I have to say that all my services depend on caddy or something?

services:
   caddy:
      image: lucaslorentz/caddy-docker-proxy:ci-alpine
      ports:
          - 80:80
          - 443:443
      environment:
          - CADDY_INGRESS_NETWORKS=caddy
      networks:
          - caddy
      volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - dashboard:/dashboard
          - caddy:/data
      restart: unless-stopped
  api:
      image: ghcr.io/saleor/saleor:3.19.11
      restart: unless-stopped
      networks:
         - backend-tier
         - caddy
      depends_on:
         - db
         - redis
         - jaeger
       volumes:
         - media:/app/media
       env_file:
         - ./common.env
         - ./backend.env
       labels:
         caddy: "api.kremik.lan"
         caddy.@file.file: "{path} {path}/"
         caddy.0_uri: "strip_prefix /media"
         caddy.1_handle: "@file"
         caddy.1_handle.0_root: "* /app/media"
         caddy.1_handle.1_file_server: ""
         caddy.2_handle.0_reverse_proxy: "{{upstreams 8000}}"

   storefront:
      build:
         context: ./storefront
         dockerfile: ./Dockerfile
      restart: unless-stopped
      networks:
         - caddy
      volumes:
         - sitemaps:/app/public/
      labels:
         caddy: kremik.lan
         caddy.0_tls: "internal"
         caddy.1_reverse_proxy: "{{upstreams 80}}"

   app-emails:
      image: ghcr.io/kremik-sk/saleor-emails:latest
      restart: unless-stopped
      env_file:
         - app-emails.env
      depends_on:
         - redis-apl
      networks:
         - app-tier
         - caddy
      labels:
        caddy: app-emails.kremik.lan
        caddy.reverse_proxy: "{{upstreams 3000}}"
   ...
volumes:
   ...
   caddy:

networks:
   backend-tier:
   app-tier:
   caddy:

Generated caddy file:

api.kremik.lan {
  @file {
    file {path} {path}/
  }
  uri strip_prefix /media
  handle @file {
    root * /app/media
    file_server
  }
  handle {
    reverse_proxy
  }
}
app-emails.kremik.lan {
  reverse_proxy
}
http://kremik.lan {
  tls internal
  reverse_proxy
}
...
francislavoie commented 3 months ago

Try to docker compose down && docker system prune then up your stack again, to make sure you have a clean slate for networks.

djkato commented 3 months ago

I had tried that many times, thinking I did something wrong with my config. Actually, what seems to have helped is setting "- CADDY_INGRESS_NETWORKS=kremik-sk_caddy", because as I showed there I had to test for sudo docker inspect kremik-sk_caddy, cause docker compose up prepends all the services and networks with folder name I think. It seems to work now.

djkato commented 3 months ago

Maybe would be nice to mention this behavior in readme as a reminder? It's unintuitive, not sure whos fault, if mine this is.