我正在尝试让Traefik注意到一个容器,该容器属于另一个网络。考虑以下docker-compose.yml,这是该目录中的唯一文件:
version: '3.7'
services:
traefik:
image: "traefik:v2.1"
container_name: "traefik"
hostname: "traefik"
ports:
- "80:80"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
command:
- '--providers.docker.defaultRule=Host(`{{ index .Labels "com.docker.compose.service" }}.docker.localhost`)'
- '--providers.docker.exposedbydefault=false'
- '--entrypoints.web.address=:80'
还有位于目录flask
中的以下项目:
flask / docker-compose.yml
version: '3.7'
services:
flaskapp:
container_name: flaskapp
build: flask_app
expose:
- 5000
labels:
traefik.enable: true
traefik.docker.network: traefik_default
traefik.http.routers.flaskapp.rule: Host(`flaskapp.localhost`)
traefik.http.routers.flaskapp.entrypoints: web
flask / flask_app / Dockerfile
FROM python:3.8
RUN python3.8 -m pip install flask
ADD ./main.py .
EXPOSE 5000
ENTRYPOINT ./main.py
flask / flask_app / main.py
#!/usr/bin/env python3.8
import flask
app = flask.Flask(__name__)
@app.route('/')
def main():
return "hello, world"
app.run(host='0.0.0.0')
我基本上在两个目录中都做过sudo docker-compose up
,发现flaskapp.localhost
收到了连接,但是超时了。因此,我尝试了sudo docker network connect traefik_default flaskapp
将flaskapp连接到traefik_default网络,但这似乎没有任何改变。 sudo docker network connect traefik_default flaskapp
为什么没有帮助?有没有办法让Traefik在不将其插入所有网络的情况下查看所有网络中的容器?
答案 0 :(得分:0)
看来,使Traefik能够访问所有docker-compose网络的一种方法是通过在其标记中添加--net host
使其以network_mode: "host"
模式运行。这是修改后的docker-compose.yml:
version: '3.7'
services:
traefik:
image: "traefik:v2.1"
container_name: "traefik"
hostname: "traefik"
network_mode: "host"
ports:
- "80:80"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
command:
- '--providers.docker.defaultRule=Host(`{{ index .Labels "com.docker.compose.service" }}.docker.localhost`)'
- '--providers.docker.exposedbydefault=false'
- '--entrypoints.web.address=:80'
不幸的是,我不了解此设置的安全隐患,因此无法确定它是否适合生产用途,但这似乎可以解决此特定问题。