【发布时间】:2019-09-21 18:03:25
【问题描述】:
我有以下设置:
version: '3'
services:
traefik:
image: traefik:v2.0
container_name: traefik
ports:
- 80:80
command:
- --api.debug=true
- --api.insecure=true
- --providers.docker=true
- --entrypoints.web.address=:80
- --providers.docker.exposedByDefault=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
labels:
- traefik.http.routers.traefik.service=api@internal
- traefik.http.routers.traefik.rule=Host(`monitor.domain.org`)
- traefik.http.routers.traefik.entrypoints=web
networks:
- web
db:
image: registry.domain.com/repo/db:latest
container_name: db
restart: always
networks:
- internal
api:
image: registry.domain.com/repo/api:latest
container_name: api
ports:
- 80:3001
volumes:
- /root/rsa.pem:/root/certs/rsa.pem
- /root/rsa_pub.pem:/root/certs/rsa_pub.pem
restart: always
depends_on:
- db
environment:
- MAIL_ADDRESS=${MAIL_ADDRESS}
- MAIL_PASSWORD=${MAIL_PASSWORD}
- MAIL_HOST=${MAIL_HOST}
labels:
- traefik.http.routers.api.rule=Host(`api.domain.org`)
- traefik.http.routers.api.entrypoints=web
networks:
- internal
- web
app:
image: registry.domain.com/repo/app:latest
container_name: app
restart: always
depends_on:
- api
- db
labels:
- traefik.http.routers.app.rule=Host(`domain.org`,`www.domain.org`)
- traefik.http.routers.app.entrypoints=web
networks:
- web
networks:
web:
external: true
internal:
external: false
显然,我从 docker 那里得到一个错误,说 Bind for 0.0.0.0:80 failed: port is already allocated。单独暴露traefik 服务的port 80 或api 服务都可以完美地工作。如果我没有在这两个服务上公开port 80,它对它们都不起作用。在 Nginx 上运行的app 服务无需无缝暴露port 80。如何让api 和traefik 服务同时在port 80 上运行?
【问题讨论】:
标签: docker-compose port traefik