当 docker-compose 有端口映射时,Traefik 无法到达后端
Traefik cannot reach backend when docker-compose has port mapping
我的 docker 处于集群模式。
我很困惑为什么 traefik 在我从它的 compose 文件中设置一个端口映射后就不能再到达我的 nexus 后端:我得到了一个 504(超时)错误。没有映射,traefils 工作正常。
Traefik 作为服务部署在 swarm 上,使用以下命令 :
docker network create --driver=overlay traefik-net
docker service create \
--name traefik \
--constraint=node.role==manager \
--publish 80:80 --publish 8088:8080 \
--with-registry-auth \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--mount type=bind,source=/var/opt/data/flat/gerdce/shared/servers/traefik/out/,target=/out/ \
--mount type=bind,source=/var/opt/data/flat/gerdce/shared/servers/traefik/traefik.toml,target=/traefik.toml \
--network traefik-net \
dvckzasc03.rouen.francetelecom.fr:5000/pli/traefik \
--docker \
--docker.domain=docker.localhost \
--docker.swarmMode=true \
--docker.watch=true \
--api
(我也试过 运行 traefik 来自 docker-compose 文件,但没有成功)
nexxus 堆栈:
version: '3.3'
services:
nexus:
image: some_nexus:5000/sonatype/nexus3
volumes:
- /var/opt/data/flat/gerdce/shared/repositories/nexus/data:/nexus-data
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- "traefik.enable=true"
- "traefik.static.frontend.rule=PathPrefix:/static/rapture"
- "traefik.serviceext.frontend.rule=PathPrefix:/service/extdirect"
- "traefik.serviceout.frontend.rule=PathPrefix:/service/outreach"
- "traefik.nexus.frontend.rule=PathPrefixStrip:/nexus"
- "traefik.port=8081"
networks:
- traefik-net
#ports:
#- "5050:5050"
networks:
traefik-net:
external: true
这样一切都很好:traefik 很好地重定向了对 /nexus 的每个调用(和 s.o。)....直到我取消注释端口映射!
我真的需要这个端口映射,以便从我的 VM 登录/推送/拉取。
关于
的任何想法
- 为什么会这样(我错过了 docs 中的 stg 吗?
- 这里的修复或解决方法是什么?
版本:
Docker version 18.03.0-ce, build 0520e24
docker-compose version 1.22.0, build f46880fe
Traefik 1.6.5
首先,我建议将其粘贴到 docker-stack.yml 中,就像您的 Nexus 堆栈文件一样,因为它更易于维护。
这是我昨天部署的一个使用端口映射的 traefik 代理示例
version: "3.4"
services:
traefik:
image: traefik:latest
ports:
- "80:80"
- "443:443"
- "8080:8080"
最终,我添加了一个缺失的标签:
- "traefik.docker.network=traefik-net"
我的 docker 处于集群模式。
我很困惑为什么 traefik 在我从它的 compose 文件中设置一个端口映射后就不能再到达我的 nexus 后端:我得到了一个 504(超时)错误。没有映射,traefils 工作正常。
Traefik 作为服务部署在 swarm 上,使用以下命令 :
docker network create --driver=overlay traefik-net
docker service create \
--name traefik \
--constraint=node.role==manager \
--publish 80:80 --publish 8088:8080 \
--with-registry-auth \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--mount type=bind,source=/var/opt/data/flat/gerdce/shared/servers/traefik/out/,target=/out/ \
--mount type=bind,source=/var/opt/data/flat/gerdce/shared/servers/traefik/traefik.toml,target=/traefik.toml \
--network traefik-net \
dvckzasc03.rouen.francetelecom.fr:5000/pli/traefik \
--docker \
--docker.domain=docker.localhost \
--docker.swarmMode=true \
--docker.watch=true \
--api
(我也试过 运行 traefik 来自 docker-compose 文件,但没有成功)
nexxus 堆栈:
version: '3.3'
services:
nexus:
image: some_nexus:5000/sonatype/nexus3
volumes:
- /var/opt/data/flat/gerdce/shared/repositories/nexus/data:/nexus-data
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- "traefik.enable=true"
- "traefik.static.frontend.rule=PathPrefix:/static/rapture"
- "traefik.serviceext.frontend.rule=PathPrefix:/service/extdirect"
- "traefik.serviceout.frontend.rule=PathPrefix:/service/outreach"
- "traefik.nexus.frontend.rule=PathPrefixStrip:/nexus"
- "traefik.port=8081"
networks:
- traefik-net
#ports:
#- "5050:5050"
networks:
traefik-net:
external: true
这样一切都很好:traefik 很好地重定向了对 /nexus 的每个调用(和 s.o。)....直到我取消注释端口映射!
我真的需要这个端口映射,以便从我的 VM 登录/推送/拉取。
关于
的任何想法- 为什么会这样(我错过了 docs 中的 stg 吗?
- 这里的修复或解决方法是什么?
版本:
Docker version 18.03.0-ce, build 0520e24
docker-compose version 1.22.0, build f46880fe
Traefik 1.6.5
首先,我建议将其粘贴到 docker-stack.yml 中,就像您的 Nexus 堆栈文件一样,因为它更易于维护。
这是我昨天部署的一个使用端口映射的 traefik 代理示例
version: "3.4"
services:
traefik:
image: traefik:latest
ports:
- "80:80"
- "443:443"
- "8080:8080"
最终,我添加了一个缺失的标签:
- "traefik.docker.network=traefik-net"