让Traefik看到来自其他网络的容器?

时间:2020-05-19 18:16:57

标签: docker traefik

我正在尝试让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在不将其插入所有网络的情况下查看所有网络中的容器?

1 个答案:

答案 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'

不幸的是,我不了解此设置的安全隐患,因此无法确定它是否适合生产用途,但这似乎可以解决此特定问题。

相关问题