Skip to content

建立 2026-09-15 更新 2026-09-15

Docker

官方映像 caddy 只含標準模組,適合 HTTP-01 自動 HTTPS 與一般反向代理。Compose 建議掛上設定目錄,並用 named volume 保存 /data(憑證)與 /config

官方:Install → DockerKeep Caddy Running → Docker ComposeDocker Hub

最小 Compose

services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./conf:/etc/caddy
      - ./site:/srv
      - caddy_data:/data
      - caddy_config:/config

volumes:
  caddy_data:
  caddy_config:
  • 80443443/udp:HTTP、HTTPS、HTTP/3。
  • ./confCaddyfile
  • ./site 對應容器內 /srv,靜態站用 root * /srv
  • caddy_data 必須持久化,否則每次重建容器都會重申請憑證。

啟動:

docker compose up -d

重載(不要重建容器):

docker compose exec -w /etc/caddy caddy caddy reload

日誌:

docker compose logs caddy -n=1000 -f

代理其他容器

Caddy 與後端要在同一網路,Caddyfile 用服務名,不要用 localhost

services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./conf:/etc/caddy
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - web

  app:
    image: my-app
    expose:
      - "3000"
    networks:
      - web

volumes:
  caddy_data:
  caddy_config:

networks:
  web:
app.example.com {
    reverse_proxy app:3000
}

expose 只讓同一網路的容器連,不必把 3000 對映到主機。對外只開 Caddy 的 80/443。

自訂映像(外掛)

標準 image 沒有 Cloudflare DNS 模組。官方建議用 builder 變體:

FROM caddy:2-builder AS builder
RUN xcaddy build --with github.com/caddy-dns/cloudflare

FROM caddy:2
COPY --from=builder /usr/bin/caddy /usr/bin/caddy

Compose 把 image: 改成 build: .,並用環境變數傳 API token。細節見 模組與 xcaddy

本機 HTTPS 與容器

容器內的內部 CA 根憑證,主機預設不信任。需要時把 /data/caddy/pki/authorities/local/root.crt 拷出來,裝進系統或瀏覽器憑證庫。官方 docs/running 有 Linux/macOS/Windows 指令。

畫面逐步示範見 YouTube 優質教學 的 Jim's Garage 與 Christian Lempa。