2016-12-02 87 views
0

我正在尝试不错的Træfɪk反向代理与一些码头集装箱。简单Træfɪk反向代理安装

这里是我的Træfɪk泊坞窗,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 

这里是我的服务泊坞窗,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ɪkWeb UI上创建的前端/后端,但我无法通过my-domain.net访问我的应用程序。

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

Træfɪk登录:

错误转发到http://172.18.0.4:80,ERR:拨打TCP 172.18.0.4:80:I/O超时

从它的本地IP我可以访问应用程序虽然(172.18.0.4),它工作正常。

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


附加信息:

  • 官方emilevauge/whoami是在单独的码头工人,撰写文件工作的罚款。
  • 我的服务工作正常,没有Træfɪk(通过映射端口80)当你与码头工人作为后端运行traefik
+0

您能否为您的Web应用程序提供Dockerfile和docker-compose.yml的完整代码片段? –

+0

您是否在多个网络中运行一些容器?那么你还应该添加一个标签,在这个标签中网络traefik应该寻找容器。否则,你也会看到一些网关超时。请提供完整的撰写文件。 –

回答

0

至于建议由@AndreasJägle,我检查了容器和它给我Traefik和我的服务不同的网络。

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

因此,在撰写起始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因为我是定义一个码头工人,撰写V1文件,所以它正在使用桥接模式。

1

,也没有必要从您的web容器暴露的端口。因此,您应该安全地从撰写文件中的web服务中删除ports部分。

你是否从同一个撰写文件运行这两个服务?您必须确保traefik容器能够访问Web容器。这可以在从同一个撰写文件或两个容器连接到同一个网络时运行。

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

由于您正在运行非常基本的设置,并且您已经使用标签设置了域,因此不需要提供某些特殊配置。请通过将/dev/null安装为toml文件(如very basic docs)来检查默认设置。

对于traefik服务:

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

为Web服务

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

谢谢你的详细解答。事实上,我发现我不需要为我的服务定义任何端口映射。同样的,我的容器也暴露了一个额外的端口,我用'traefik.port'指定了正确的端口。问题已更新。然而,我仍然得到超时和没有日志传入我的服务(nginx) –

+0

我只是试图在一个单独的码头工人组成的文件中的官方'emilevauge/whoami'小图像,它工作正常。没有Traefik,我的图像工作正常。我不知道如何调试。 –

+1

您能否提供'docker network ls'的输出和一些'docker network检查'的网络,这些网络被称为您撰写文件所在的文件夹(例如,对于名为mytest_default的网络,如果您的文件夹名称类似于我的-测试)。我认为这些容器不能彼此接触。 –