Docker
官方映像 caddy 只含標準模組,適合 HTTP-01 自動 HTTPS 與一般反向代理。Compose 建議掛上設定目錄,並用 named volume 保存 /data(憑證)與 /config。
官方:Install → Docker、Keep Caddy Running → Docker Compose、Docker 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:
80/443/443/udp:HTTP、HTTPS、HTTP/3。./conf放Caddyfile。./site對應容器內/srv,靜態站用root * /srv。caddy_data必須持久化,否則每次重建容器都會重申請憑證。
啟動:
重載(不要重建容器):
日誌:
代理其他容器
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:
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。