为什么Traefik在使用Docker运行时没有读取我的traefik.toml文件?

时间:2017-10-11 10:36:59

标签: docker traefik

按照official Docker image中提到的步骤操作时,我似乎无法让Traefik读取我的traefik.toml文件。

这有效

来自docker-compose.yml

version: '3'

services:
  proxy:
    image: traefik:1.3.5
    command: --docker --docker.domain=docker.localhost --logLevel=DEBUG
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      #- ./traefik.toml:/traefik.toml

  whoami:
    image: emilevauge/whoami
    labels:
      - "traefik.backend=whoami"
      - "traefik.frontend.rule=PathPrefix:/whoami"

请注意,未装入任何配置文件,并且所有配置都作为参数传递。

现在,如果我运行docker-compose up,我会看到一堆来自Traefik的调试语句。如果我测试应用程序,它可以工作(是的,我正在运行Windows 7):

$ curl 'http://192.168.99.100:80/whoami'
Hostname: c94bec5d0e3e
IP: 127.0.0.1
IP: 172.19.0.3
GET /whoami HTTP/1.1
Host: 192.168.99.100
User-Agent: curl/7.50.1
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 192.168.99.1
X-Forwarded-Host: 192.168.99.100
X-Forwarded-Proto: http
X-Forwarded-Server: b8946b1c34a1

这不起作用

来自docker-compose.yml

version: '3'

services:
  proxy:
    image: traefik:1.3.5
    #command: --docker --docker.domain=docker.localhost --logLevel=DEBUG
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/etc/traefik/traefik.toml

  whoami:
    image: emilevauge/whoami
    labels:
      - "traefik.backend=whoami"
      - "traefik.frontend.rule=PathPrefix:/whoami"

请注意,没有参数传递给Traefik,只传递配置文件。

现在,如果我运行docker-compose up,则不会出现任何日志语句。如果我测试应用程序,我会得到一个404:

$ curl 'http://192.168.99.100:80/whoami'
404 page not found

当然,如果没有任何调试声明,很难知道错误。

这是我的traefik.toml文件:

debug = true
logLevel = "DEBUG"

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "docker.localhost"
watch = true
exposedbydefault = false

我已尝试将文件安装到/etc/traefik/traefik.toml/traefik.toml,但结果相同。

我也试过运行official example中提到的示例,结果相似。

我在Windows 7上运行此功能,但我不确定这是否相关。我可以毫无问题地成功地将文件挂载到其他图像中。

那么我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为你的问题是Windows。

您使用Docker for Windows还是Docker Toolbox? 如果我没记错的话,使用W7你必须使用Docker Toolbox。

我认为您的文件treafik.toml未装入您的容器。

答案 1 :(得分:0)

我有同样的问题。 您需要在traefik.toml中指定entryPoints部分

# traefik.toml
debug = true
logLevel = "DEBUG"

[entryPoints]
  [entryPoints.http]
  address = ":80"

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "docker.localhost"
watch = true
exposedbydefault = false

并安装它:

volumes:
   - ./traefik.toml:/etc/traefik/traefik.toml

(当然,如果docker-compose.yml和traefik.toml位于同一文件夹中)