Traefik + Nextcloud 导致网关错误
Traefik + Nextcloud results in bad gateway
我启动了 3 个服务 运行。
一个 mariadb 和 nextcloud 实例:
version: '2.1'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=my_root_password
- MYSQL_PASSWORD=my_password
- MYSQL_DATABASE=my_database
- MYSQL_USER=my_user
app:
image: nextcloud
restart: always
networks:
- web
- default
ports:
- 9000
labels:
- "traefik.backend=app"
- "traefik.docker.network=web"
- "traefik.frontend.rule=Host:my_host"
- "traefik.enable=true"
- "traefik.port=9000"
- "traefik.default.protocol=http"
networks:
web:
external: true
还有一个 traefik 服务:
version: '2'
services:
traefik:
image: traefik:1.5.4
restart: always
ports:
- 80:80
- 443:443
networks:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/traefik/traefik.toml:/traefik.toml
- /opt/traefik/acme.json:/acme.json
container_name: traefik
networks:
web:
external: true
这个 traefik 实例正在使用这个配置文件:
debug = false
logLevel = "ERROR"
defaultEntryPoints = ["https","http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[retry]
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "my_host"
watch = true
exposedByDefault = false
[acme]
email = "my_email"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
现在,当我转到我的主机时,它会重定向到 HTTPS,但随后它只显示 bad gateway
,没有其他任何内容。它应该显示 nextcloud Web 应用程序。有人知道为什么会这样吗?我 运行 使用 docker-compose up -d
命令编写文件。
现在可能为时已晚,但我自己也 运行 解决了这个问题,因此发布了一个解决问题的答案。
Nextcloud 在 Traefik 尝试连接的容器 IP 地址上公开端口 80。因此,您错误地为 'traefik.port' 标签指定了端口。将其从 9000 更改为 80。
我启动了 3 个服务 运行。 一个 mariadb 和 nextcloud 实例:
version: '2.1'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=my_root_password
- MYSQL_PASSWORD=my_password
- MYSQL_DATABASE=my_database
- MYSQL_USER=my_user
app:
image: nextcloud
restart: always
networks:
- web
- default
ports:
- 9000
labels:
- "traefik.backend=app"
- "traefik.docker.network=web"
- "traefik.frontend.rule=Host:my_host"
- "traefik.enable=true"
- "traefik.port=9000"
- "traefik.default.protocol=http"
networks:
web:
external: true
还有一个 traefik 服务:
version: '2'
services:
traefik:
image: traefik:1.5.4
restart: always
ports:
- 80:80
- 443:443
networks:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/traefik/traefik.toml:/traefik.toml
- /opt/traefik/acme.json:/acme.json
container_name: traefik
networks:
web:
external: true
这个 traefik 实例正在使用这个配置文件:
debug = false
logLevel = "ERROR"
defaultEntryPoints = ["https","http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[retry]
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "my_host"
watch = true
exposedByDefault = false
[acme]
email = "my_email"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
现在,当我转到我的主机时,它会重定向到 HTTPS,但随后它只显示 bad gateway
,没有其他任何内容。它应该显示 nextcloud Web 应用程序。有人知道为什么会这样吗?我 运行 使用 docker-compose up -d
命令编写文件。
现在可能为时已晚,但我自己也 运行 解决了这个问题,因此发布了一个解决问题的答案。
Nextcloud 在 Traefik 尝试连接的容器 IP 地址上公开端口 80。因此,您错误地为 'traefik.port' 标签指定了端口。将其从 9000 更改为 80。