Traefik filter portainer 作为 docker 群中的"disabled container"



我有一个3个节点的小型docker游泳设置。Traefik在管理节点上使用以下堆栈文件运行:

version: '3.8'
services:
traefik:
image: traefik:v2.6
command:
- --configFile=/traefik.yml
ports:
- 80:80
- 8080:8080
- 443:443
deploy:
mode: global
placement:
constraints:
- node.role == manager 
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.http.routers.traefik-public-https.middlewares=admin-auth
- traefik.http.middlewares.admin-auth.basicauth.users=admin:kttMoHm$$ZeaIvc8uDXZaapr1$$xsez8wWG$$2O0
- traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
- traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
- traefik.http.routers.traefik-public-http.rule=Host(`traefik-test.mydomain.com`)
- traefik.http.routers.traefik-public-http.entrypoints=http
- traefik.http.routers.traefik-public-http.middlewares=https-redirect
- traefik.http.routers.traefik-public-https.rule=Host(`traefik-test.mydomain.com`)
- traefik.http.routers.traefik-public-https.entrypoints=https
- traefik.http.routers.traefik-public-https.tls=true     
- traefik.http.services.traefik-public.loadbalancer.server.port=8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik-public-certificates:/certificates
- /certs:/certs
- /logs:/logs
- /configs/traefik.yml:/traefik.yml
- /configs/tls-cert.yml:/etc/traefik/tls-cert.yml

networks:
- traefik-public

volumes:
traefik-public-certificates:
networks:
traefik-public:
external: true

我还使用以下堆栈文件部署了Portainer:

version: '3.8'
services:
agent:
image: portainer/agent:latest
environment:
AGENT_CLUSTER_ADDR: tasks.agent
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
portainer:
image: portainer/portainer-ce:latest
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- 9000:9000
volumes:
- portainer_data:/data
networks:
- agent_network
- traefik-public
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
labels:
- traefik.enable=true
- traefik.http.routers.portainer.rule=Host(`portainer-test.mydomain.com`)
- traefik.http.services.portainer.loadbalancer.server.port=9000
- traefik.http.routers.portainer.entrypoints=https
- traefik.http.routers.portainer.tls=true

networks:
agent_network:
driver: overlay
attachable: true
traefik-public:
external: true
volumes:
portainer_data:

由于某些原因,Traefik跳过了我的Portainer容器。

time="2023-04-08T23:55:17Z" level=debug msg="Filtering disabled container" providerName=docker container=portainer-agent-h8m7kqdzqh8ik4rahjmbc7qw2
time="2023-04-08T23:55:17Z" level=debug msg="Filtering disabled container" providerName=docker container=portainer-agent-rs2l6xaem2l4dztb8kvf4iqrh
time="2023-04-08T23:55:17Z" level=debug msg="Filtering disabled container" container=portainer-agent-ytot9erq29a7zfh2d4o9p7z1b providerName=docker
time="2023-04-08T23:55:17Z" level=debug msg="Filtering disabled container" providerName=docker container=portainer-portainer-bispq34jvxyk8roxv7hndb28b

为了检查我的设置和标签是否正确,我创建了这个堆栈并部署了它

version: '3.8'
services:
my-app:
image: containous/whoami:v1.3.0
networks:
- traefik-public
command:
- --port=8082 
ports:
- 8082:8082
deploy:
labels:
- traefik.enable=true
- traefik.http.routers.my-app.rule=Host(`whoami.mydomain.com`)
- traefik.http.services.my-app.loadbalancer.server.port=8082
- traefik.http.routers.my-app.entrypoints=https
- traefik.http.routers.my-app.tls=true
networks:
traefik-public:
external: true

我可以在"whoami.mydomain.com";然而,我无法访问Portainer " portain-test.mydomain.com "PS:我可以使用EXTERNAL_IP:9000直接访问Portainer

你知道为什么会这样吗?

您必须告诉traefik它需要在traefik-public网络上连接到容器->网络https://doc.traefik.io/traefik/providers/docker/

添加标签:

traefik.docker.network = traefik-public

到portainer服务应该做的就是

最新更新