使用 docker 的 Traefik 配置文件位置

1N5*_*818 7 docker traefik

Traefik 的入门指南很难以任何一步一步的方式遵循。它存在以下问题:

  1. 入门traefik建议作为命令运行,但不能在traefik映像上运行任何命令,您必须使用traefik:alpine,甚至使用 Shell 进入容器docker exec -it ...
  2. 《入门》几乎没有提及文件traefik.toml
  3. #1 让新读者感到困惑,weather traefik 是否打算作为容器运行,自动更新每个新部署的容器(如jwilder 的 nginx 代理),或者是否打算在 docker 主机上运行。

他们的原始docker-compose.yml文件如下所示:

version: '3' 

services:
  reverse-proxy:
    image: traefik # The official Traefik docker image
    command: --api --docker #--consul --consul.endpoint=127.0.0.1:8500 # Enables the web UI and tells Traefik to listen to docker
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
  whoami:
    image: containous/whoami # A container that exposes an API to show its IP address
    labels:
      - "traefik.frontend.rule=Host:whoami.docker.localhost"
Run Code Online (Sandbox Code Playgroud)

然后你可以使用以下命令运行它:

docker-compose up -d reverse-proxy
Run Code Online (Sandbox Code Playgroud)

这很好,您可以在此处添加新服务并指定新标签,如上面的标签,即traefik.frontend.rule=Host:whoami-other.docker.localhost.

您可以使用curl 进行测试,指定主机标题,如下所示:

curl -H Host:whoami.docker.localhost http://127.0.0.1
Run Code Online (Sandbox Code Playgroud)

问题1)

必须更改第 5 行才能使用该图像traefik:alpine

    image: traefik:alpine # The official Traefik docker image
Run Code Online (Sandbox Code Playgroud)

现在你实际上可以使用docker exec这个容器了。您只能在高山图像上使用sh(不能使用 )。/bin/bash我们现在可以执行以下操作:

docker exec -it traefik_reverse-proxy_1 sh
docker exec -it traefik_reverse-proxy_1 traefik --help
Run Code Online (Sandbox Code Playgroud)

问题2)

默认情况下docker-compose.yml,没有提及文件traefik.toml。即使我docker-compose up -d [some_new_service]可以访问这些服务,脱壳到容器中也没有traefik.toml文件。它不在容器中的任何地方,尽管根据Basics的底部,它说寻找它的默认位置,例如/etc/traefik/$HOME/.traefik/.或工作目录。这是指主机还是容器?在我运行的容器中grep find,只看到二进制文件:

/ # find / | grep traefik
/usr/local/bin/traefik
Run Code Online (Sandbox Code Playgroud)

traefik 是否将我的服务配置存储在内存中?

文档中的下一个逻辑页面(基础知识)立即开始详细配置traefik.toml,但我必须对这样的文件进行试验。

我不得不回到该页面底部的“入门”阅读,发现traefik.toml当他们建议使用官方映像并像这样运行时,必须在卷中指定使用静态文件:

docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik
Run Code Online (Sandbox Code Playgroud)

因此,我将volumes原始docker-compose.yml服务下的部分更改reverse-proxy为使用类似的内容:

volumes:
  - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
  - $PWD/traefik.toml:/etc/traefik/traefik.toml
Run Code Online (Sandbox Code Playgroud)

即使这样,我也没有可用的基本文件(他们的 GitHub 的示例文件夹traefik.toml中甚至没有)。我必须去找一个,但甚至不确定它将如何应用于我正在运行的服务的现有配置(即和/或)。最后,在容器上运行会显示中的相同文件,但它没有提及服务(我仍然可以从我的 docker 主机访问该服务)。那么配置在哪里呢?whoamiwhoami-otherfind / | grep traefiktraefik.toml/etc/traefik/traefik.tomlcurl -H Host:whoami.docker.localhost http://127.0.0.1