简单的Træfɪk反向代理安装

时间:2016-12-02 16:42:51

标签: networking docker docker-compose reverse-proxy traefik

我正在使用一些docker容器尝试漂亮的Træfɪk反向代理。

这是我的Træfɪk docker-compose.yml

version: '2'
services:
  traefik:
    image: traefik
    command: --web --docker --docker.domain=my-domain.net --logLevel=DEBUG
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /dev/null:/traefik.toml

以下是我的服务' docker-compose.yml 网页部分:

version: '2'
services:
  # [...]
  web:
    build: . # An nginx based image
    container_name: my_app_web
    volumes:
      - ..:/app/
    depends_on:
      - db
      - redis
    labels:
      - "traefik.backend=my_app"
      - "traefik.frontend.rule=Host:my-domain.net"
      - "traefik.port=80"

启动所有这些东西,我看到我的前端/后端在Træfɪk网页用户界面上创建,但我无法通过my-domain.net访问我的应用程序。

$ curl -H Host:my-domain.net http://127.0.0.1
# ... after ±30s.
Gateway Timeout

Træfɪklog:

  

转发到http://172.18.0.4:80时出错,错误:拨打tcp 172.18.0.4:80:i / o timeout

我可以通过它的本地IP访问应用程序(172.18.0.4)并且它正常工作。

我肯定在这里遗忘了什么,有什么帮助吗?

其他信息:

  • 官方emilevauge/whoami在单独的docker-compose文件中正常工作。
  • 我的服务工作正常,没有Træfɪk(通过映射端口80)

2 个答案:

答案 0 :(得分:1)

使用docker作为后端运行traefik时,无需公开web容器中的端口。因此,您可以安全地从撰写文件中的ports服务中删除web部分。

您是否在同一个撰写文件中运行这两项服务?您必须确保traefik容器能够访问Web容器。无论是从同一个撰写文件运行还是将两个容器连接到同一网络,都可以使用它。

超时的另一种可能性是您的Web容器暴露多个端口(看看您的Dockerfile)。如果是这种情况,您需要明确告诉traefik应该将请求映射到哪个端口。在您的情况下,这应该是"traefik.port=80"

当您运行非常基本的设置并且已使用标签设置域时,无需提供某些特殊配置。请查看默认设置,只需将/dev/null挂载为very basic docs中的toml文件。

对于traefik服务:

volumes:
  - /var/run/docker.sock:/var/run/docker.sock
  - /dev/null:/traefik.toml

适用于您的网络服务

labels:
  - "traefik.backend=my_app"
  - "traefik.frontend.rule=Host:my-domain.net"
  - "traefik.port=80"

答案 1 :(得分:0)

根据@AndreasJägle的建议,我检查了容器,它向我展示了Traefik和我在不同网络中的服务。

我认为默认情况下,docker始终使用桥接模式,但从v2开始,compose networking似乎不再是这种情况。它正在为docker-compose文件创建一个网络(基于项目名称)。

因此,使用compose start v2,您必须通过需要通信的docker-compose文件指定公共网络。

在这里,我只使用为traefik生成的那个:

version: '2'
services:
  # ...
  web:
    # ...
    labels:
      - "traefik.backend=my_app"
      - "traefik.frontend.rule=Host:my-domain.net"
      - "traefik.port=80"

networks:
  default:
    external:
      name: traefik_default

其他信息:

Traefik与emilevauge/whoami工作正常,因为我正在定义一个docker-compose v1文件,所以它正在使用桥接模式。