Docker 码头工人和Traefik蜂拥而至:集装箱正在增加,但数量达到404
我正在努力使用traefik设置Docker swarm堆栈。我决定尝试将traefik作为jwolder/nginx代理的替代品,因为不幸的是后者似乎不支持Docker swrarm模式。但我发现traefik是个问题(可能是我的错!) 我有一个WordPress容器(已复制)和一个MySQL容器,以及traefik容器。swarm中的所有容器都已创建并启动,Docker 码头工人和Traefik蜂拥而至:集装箱正在增加,但数量达到404,docker,docker-compose,traefik,docker-swarm-mode,Docker,Docker Compose,Traefik,Docker Swarm Mode,我正在努力使用traefik设置Docker swarm堆栈。我决定尝试将traefik作为jwolder/nginx代理的替代品,因为不幸的是后者似乎不支持Docker swrarm模式。但我发现traefik是个问题(可能是我的错!) 我有一个WordPress容器(已复制)和一个MySQL容器,以及traefik容器。swarm中的所有容器都已创建并启动,docker日志没有显示任何错误,但当我访问“example.org”(不是真正的域)时,我只看到404页面未找到。所以这一定是trae
docker日志
没有显示任何错误,但当我访问“example.org”(不是真正的域)时,我只看到404页面未找到
。所以这一定是traefik和我希望代理的容器之间的通信问题。然而,我也看不到traefik仪表板,所以可能还有其他事情要做
这是我的docker撰写文件:
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:
版本:“3”
服务:
特拉菲克:
图片:traefik:最新
命令:--api.unsecure=true\
--providers.docker=true\
--providers.docker.exposedbydefault=false\
--providers.docker.swarmmode=true\
--providers.docker.watch=true\
--日志级别=调试
端口:
- "80:80"
- "8080:8080"
卷数:
-/var/run/docker.sock:/var/run/docker.sock
网络:
-特拉菲克
部署:
模式:全球
安置:
限制条件:
-node.role==管理器
db:
图片:mysql:5.7
卷数:
-./db/initdb.d:/docker入口点initdb.d
网络:
-特拉菲克
环境:
MYSQL\u ROOT\u密码:
MYSQL\u数据库:
MYSQL\u用户:
MYSQL\u密码:
部署:
副本:1份
重新启动\u策略:
条件:故障时
延迟:5秒
最多尝试次数:3次
应用程序:
图片:my repo/wordpress:最新
取决于:
-分贝
网络:
-特拉菲克
环境:
-虚拟_端口=80
-虚拟主机=example.org
部署:
副本:2份
重新启动\u策略:
条件:故障时
延迟:5秒
最多尝试次数:3次
标签:
-“traefik.enable=true”
-“traefik.frontend.rule=Host:example.org”
网络:
特拉菲克:
原始的nginx代理设置工作得很好,但正如我所说的,它不允许我运行swarm。我用traefik做实验才一天,所以这可能是小学生犯的某种错误
注意:我在my/etc/hosts中将我的实际.org域别名为127.0.0.1。也许这是个问题?我无法想象会是这样,我已经使用该设置运行Docker容器很多年了,没有出现任何问题。好的,所以我让它在非swarm模式下使用以下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:
版本:“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:
和代理容器标签
- "traefik.http.services.app.loadbalancer.server.port=80"
。。。所以我不确定我做对了什么。如果能提供任何线索,我将不胜感激
不过,至少现在起作用了
更新:Traefik文档声明标签
traefik.http.services.<service_name>.loadbalancer.server.port
traefik.http.services..loadbalancer.server.port
是(请在该页的服务下查看)。看来我只是错过了这一点
traefik.http.services.<service_name>.loadbalancer.server.port