无法通过Traefik Docker连接第二个MongoDB容器求助
问题分析与解决方案
核心问题
你的mongo2容器无法连接,根源是Traefik路由配置错误:
- mongo2的路由标签里,
traefik.tcp.routers.mongo2.service=mongo错误指向了第一个mongo容器的服务,导致所有到domain2.com的请求都被转发到mongoDB容器,而非mongoDB2。 - 新增
mongo2入口点启动失败是因为Traefik不允许同一端口被多个entrypoint绑定,这完全没必要,复用已有的mongo入口点即可实现同一端口多域名转发。
修正后的完整配置
version: "3.3" services: traefik: image: "traefik:v2.10" container_name: "traefik" command: - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.websecure.address=:443" - "--entrypoints.mongo.address=:27017" - "--certificatesresolvers.le.acme.tlschallenge=true" - "--certificatesresolvers.le.acme.email=myemail@email.com" - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json" ports: - "443:443" - "8080:8080" - "27017:27017" volumes: - "./letsencrypt:/letsencrypt" - "/var/run/docker.sock:/var/run/docker.sock:ro" networks: - "traefik" mongo: image: "mongo:4.4-bionic" restart: "always" container_name: "mongoDB" environment: - "MONGO_INITDB_ROOT_USERNAME=admin" - "MONGO_INITDB_ROOT_PASSWORD=secret" volumes: - "volDBts:/data/db" labels: - "traefik.enable=true" - "traefik.tcp.routers.mongo.rule=HostSNI(`domain1.com`)" - "traefik.tcp.routers.mongo.entrypoints=mongo" - "traefik.tcp.routers.mongo.service=mongo" - "traefik.tcp.services.mongo.loadbalancer.server.port=27017" - "traefik.tcp.routers.mongo.tls.domains[0].main=domain1.com" networks: - "traefik" mongo2: image: "mongo:4.4-bionic" restart: "always" container_name: "mongoDB2" environment: - "MONGO_INITDB_ROOT_USERNAME=admin" - "MONGO_INITDB_ROOT_PASSWORD=secret" volumes: - "volDBts2:/data/db" labels: - "traefik.enable=true" - "traefik.tcp.routers.mongo2.rule=HostSNI(`domain2.com`)" - "traefik.tcp.routers.mongo2.entrypoints=mongo" # 复用同一个入口点 - "traefik.tcp.routers.mongo2.service=mongo2" # 修正为指向自身服务 - "traefik.tcp.services.mongo2.loadbalancer.server.port=27017" - "traefik.tcp.routers.mongo2.tls.domains[0].main=domain2.com" networks: - "traefik" volumes: volDBts: volDBts2: networks: traefik: external: true
关键修改点
对mongo2容器的Traefik标签做了两处修正:
- 将
traefik.tcp.routers.mongo2.service=mongo改为traefik.tcp.routers.mongo2.service=mongo2,确保路由指向正确的服务 - 保留
traefik.tcp.routers.mongo2.entrypoints=mongo,复用27017端口的入口点
验证步骤
- 停止并移除现有容器:
docker-compose down - 启动新配置:
docker-compose up -d - 查看Traefik dashboard(http://服务器IP:8080),确认两个TCP路由
mongo和mongo2均已正常加载 - 使用Mongo Compass重新测试两个连接字符串,此时domain2.com应该能正常连接到mongoDB2容器
内容的提问来源于stack exchange,提问作者Florentino Daniel Acosta Nava
相关产品推荐
相关产品推荐

