gpt4 book ai didi

带有 Traefik 的 Docker Swarm : containers are up but getting 404

转载 作者:行者123 更新时间:2023-12-04 15:39:12 25 4
gpt4 key购买 nike

我正在努力使用 traefik 设置 Docker 群堆栈。我决定尝试使用 traefik 作为 jwolder/nginx-proxy 的替代品,不幸的是后者似乎不支持 Docker swrarm 模式。但我发现 traefik 是个问题(可能是我的错!)。

我有一个 WordPress 容器(复制)和一个 MySQL 容器,以及 traefik 容器。 swarm 中的所有容器都已创建并启动,docker logs <container_id>没有显示任何错误,但是当我访问“example.org”(不是真实域)时,我只看到 404 page not found .所以这一定是 traefik 和我希望代理的容器之间的通信问题。但是我也没有看到 traefik 仪表板,所以可能还有其他事情正在发生。

这是我的 docker-compose 文件:

version: '3'

services:
traefik:
image: traefik:latest
command: --api.insecure=true \
--providers.docker=true \
--providers.docker.exposedbydefault=false \
--providers.docker.swarmmode=true \
--providers.docker.watch=true \
--logLevel=DEBUG
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- traefik
deploy:
mode: global
placement:
constraints:
- node.role == manager

db:
image: mysql:5.7
volumes:
- ./db/initdb.d:/docker-entrypoint-initdb.d
networks:
- traefik
environment:
MYSQL_ROOT_PASSWORD: <root_password>
MYSQL_DATABASE: <db_name>
MYSQL_USER: <db_user>
MYSQL_PASSWORD: <user_password>
deploy:
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3

app:
image: my-repo/wordpress:latest
depends_on:
- db
networks:
- traefik
environment:
- VIRTUAL_PORT=80
- VIRTUAL_HOST=example.org
deploy:
replicas: 2
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:example.org"

networks:
traefik:

原始的 nginx-proxy 设置工作得很好,但是,正如我所说,不允许我运行 swarm。我只试用了一天的 traefik,所以这可能是某种小学生的错误。

注意:我在我的/etc/hosts 中将我的实际 .org 域别名为 127.0.0.1。也许这是个问题?我无法想象会是这样,我一直在使用该设置运行 Docker 容器多年,没有出现任何问题。

最佳答案

好的,所以我使用以下 docker-compose 文件使其在非集群模式下工作:

版本:'3'

services:
traefik:
image: "traefik:v2.0.0-rc3"
container_name: "traefik"
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- traefik

db:
image: mysql:5.7
volumes:
- ./db/initdb.d:/docker-entrypoint-initdb.d
networks:
- traefik
environment:
MYSQL_ROOT_PASSWORD: <root_password>
MYSQL_DATABASE: <db_name>
MYSQL_USER: <db_user>
MYSQL_PASSWORD: <user_password>

app:
image: my-repo/wordpress:latest
depends_on:
- db
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`example.org`)"
- "traefik.http.routers.app.entrypoints=web"

networks:
traefik:

然后我尝试了以下 swarm 配置,它起作用了:

version: '3'

services:
traefik:
image: "traefik:v2.0.0-rc3"
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.swarmmode=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.endpoint=unix:///var/run/docker.sock"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- traefik
deploy:
mode: global
placement:
constraints: [node.role==manager]

db:
image: mysql:5.7
volumes:
- ./db/initdb.d:/docker-entrypoint-initdb.d
networks:
- traefik
environment:
MYSQL_ROOT_PASSWORD: <root_password>
MYSQL_DATABASE: <db_name>
MYSQL_USER: <db_user>
MYSQL_PASSWORD: <user_password>
deploy:
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3

app:
image: my-repo/wordpress:latest
networks:
- traefik
deploy:
replicas: 2
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`example.org`)"
- "traefik.http.routers.app.entrypoints=web"
- "traefik.http.services.app.loadbalancer.server.port=80"

networks:
traefik:

更具体地说,我只在添加命令后才让它工作

- "--providers.docker.endpoint=unix:///var/run/docker.sock"

和代理容器标签

- "traefik.http.services.app.loadbalancer.server.port=80"

... 所以我不太确定我做对了什么。如果能对此有所启发,我们将不胜感激。

不过,至少现在可以用了。

更新:Traefik 文档声明标签

traefik.http.services.<service_name>.loadbalancer.server.port

mandatory for Docker swarm mode (查看该页面上的服务)。所以好像我只是错过了那个。

关于带有 Traefik 的 Docker Swarm : containers are up but getting 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58573806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com