我使用 Dokploy 通过 docker compose 和 traefik(反向代理)部署了一个 Ghost 博客实例。我从浏览器访问 Ghost 博客部署时遇到问题:给出 Bad Gateway 错误。 如果我使用 Ghost 部署的默认
2368
端口,那么一切正常,但如果我使用端口映射 3204:2368
在不同端口上访问它,那么我会收到 Bad Gateway 错误。
docker-compose.yml:
name: ghost-live-1
services:
ghost:
image: ghost:5-alpine
container_name: ghost_serv_live_k
restart: always
environment:
database__client: mysql
database__connection__host: ghst_db
database__connection__user: ghost
database__connection__password: ghost
database__connection__database: ghost
url: https://blog.mydomain.com
NODE_ENV: production
ports:
- '3204:2368'
labels:
- traefik.docker.network=dokploy-network
- traefik.enable=true
- traefik.http.routers.ghostlive-ghost-2e1bbd-50-web.rule=Host(`blog.mydomain.com`)
- traefik.http.routers.ghostlive-ghost-2e1bbd-50-web.entrypoints=web
- traefik.http.services.ghostlive-ghost-2e1bbd-50-web.loadbalancer.server.port=3204
- traefik.http.routers.ghostlive-ghost-2e1bbd-50-web.service=ghostlive-ghost-2e1bbd-50-web
- traefik.http.routers.ghostlive-ghost-2e1bbd-50-web.middlewares=redirect-to-https@file
- traefik.http.routers.ghostlive-ghost-2e1bbd-50-websecure.rule=Host(`blog.mydomain.com`)
- traefik.http.routers.ghostlive-ghost-2e1bbd-50-websecure.entrypoints=websecure
- traefik.http.services.ghostlive-ghost-2e1bbd-50-websecure.loadbalancer.server.port=3204
- traefik.http.routers.ghostlive-ghost-2e1bbd-50-websecure.service=ghostlive-ghost-2e1bbd-50-websecure
- traefik.http.routers.ghostlive-ghost-2e1bbd-50-websecure.tls.certresolver=letsencrypt
volumes:
- ghost_serv:/var/lib/ghost/content
depends_on:
ghst_db:
condition: service_healthy
networks:
- dokploy-network
ghst_db:
image: mysql:9
container_name: ghost_db_live_k
restart: always
environment:
MYSQL_ROOT_PASSWORD=example
MYSQL_DATABASE=ghost
MYSQL_USER=ghost
MYSQL_PASSWORD=ghost
networks:
- dokploy-network
volumes:
- ghost_db:/var/lib/mysql
healthcheck:
test:
- CMD
- mysqladmin
- ping
- '-h'
- 127.0.0.1
interval: 10s
timeout: 5s
retries: 3
start_period: 60s
volumes:
ghost_serv:
driver: local
ghost_db:
driver: local
networks:
dokploy-network:
external: true
我是否缺少一些关键配置来解释为什么 traefik 反向代理无法访问 Ghost 容器?
这部分代码:
ports:
- '3204:2368'
告诉 Ghost 应该可以从端口 3204 上的外部容器获得,该端口映射到内部容器端口 2368。
基于您的配置 traefik 和 Ghost 位于同一 docker 网络中
dokploy-network
这意味着 traefik 将直接在内部端口(2368)上连接到 Ghost,并且 docker-compose.yml
中的端口配置在这种情况下不相关。因此,如果您希望 traefik 连接到不同的端口,您需要更新 Ghost 配置,以便它侦听不同的端口,然后是 2368,然后更新其余配置。
似乎这里描述了如何更改幽灵端口: