在 play-docker.com 上测试 traefik

Testing traefik on play-with-docker.com

我尝试在 play-with-docker.com 上测试和使用 traefik,然后在我自己的私人服务器上 运行 它。

但是我无法得到一个使用 2 个容器的简单示例,请参阅下面的 docker-compose.yml 文件。容器都以 up 开头,日志中没有任何错误。我可以在端口 80 上看到带有子路径 /traefiktraefik dashboard。但是我在子路径 /dozzle.

的端口 80 上看不到 dozzle

我的配置有什么问题? 还是 traefikplay-with-docker.com 上根本无法正常工作?

如果我取消注释 ports 部分,我可以在端口 8083 上看到 dozzle - 但这不是我想要的,那么我正在绕过 traefik...

感谢所有提示...

---
version: '3.5'

networks:
  proxy:
    name: proxy
    driver: bridge
  web:
    name: web
    driver: bridge

services:
  traefik:
    image: traefik
    container_name: traefik
    restart: always
    command:
      - "--logLevel=INFO"
      - "--api"
      - "--defaultentrypoints=http"
      - "--docker"
      - "--docker.watch"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - proxy
      - web
    ports:
      - "80:80"
    labels:
    - "traefik.enable=true"
    - "traefik.backend=traefik"
    - "traefik.frontend.rule=PathPrefixStrip:/traefik"
    - "traefik.port=8080"
    - "traefik.docker.network=proxy"

  dozzle:
    image: amir20/dozzle
    container_name: dozzle
    restart: always
    depends_on:
      - traefik
    command:
      - "--level=DEBUG"
      - "--base=/dozzle"
      - "--addr=:8083"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    # ports:
    #   - 8083:8083
    networks:
      - proxy
    labels:
    - "traefik.enable=true"
    - "traefik.backend=dozzle"
    - "traefik.frontend.rule=PathPrefixStrip:/dozzle"
    - "traefik.port=8083"
    - "traefik.docker.network=proxy"

编辑 2019 年 7 月 13 日 - 附加信息

我使用 Docker 工具箱在我的本地机器上尝试了一个简化版本的撰写文件。还是一样的问题。如果我在 http://192.168.99.100/dozzle 上,我得到一个空白的白页,在 http://192.168.99.100 上,我得到一个 404 错误。

这是简化版:

---
version: '3.5'

services:

  traefik:
    image: traefik
    container_name: traefik
    restart: always
    command:
      - "--docker"
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  dozzle:
    image: amir20/dozzle
    container_name: dozzle
    restart: always
    depends_on:
      - traefik
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=PathPrefixStrip:/dozzle"
      - "traefik.port=8080"

如果我在浏览器中切换到源代码视图,我在 http://192.168.99.100/dozzle 上获得的空白页面包含一个 HTML 页面。但是,只显示一个空白的白页。我假设无法解析 HTML 代码中的相关链接,因此无法加载 css、js 等。

尝试将其添加到您的 traefik 服务的端口部分:

ports:
  - '80:80'
  - '443:443'
  - '8080:8080'

然后为你的 Dozzle 试试这个:

- traefik.port=80

这可能是个人问题,但我总是将 'web' 网络用作外部网络。

如果我理解 dozzle 命令行选项“--base=/doozle”,应该通过路径

到达后端

:8083/dozzle

但是在您的前端规则中,您从初始请求中删除/删除了“/doozle”:

"traefik.frontend.rule=PathPrefixStrip:/dozzle"

因此,您应该只使用 PathPrefix

我找到了一个现在有效的解决方案。感谢所有提示。也许我同时更改了很多选项;-(

此撰写文件有效:

---
version: '3.5'

services:

  traefik:
    image: traefik
    container_name: traefik
    restart: always
    command:
      - "--docker"
      - "--logLevel=INFO"
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  dozzle:
    image: amir20/dozzle
    container_name: dozzle
    restart: always
    depends_on:
      - traefik
    command:
      - "--base=/dozzle"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=PathPrefix:/dozzle"
      - "traefik.port=8080"

现在我在 http://192.168.99.100/dozzle 上看到 Dozzle,例如转发到 http://192.168.99.100/dozzle/container/9b03de0e20a8

作为参考,Dozzle 将使用 addr 参数侦听不同的端口;所以对于 traefik 2.0,这个组合有效

  # Dozzle - Real-time Docker Log Viewer
  dozzle:
    hostname: 'dozzle'
    container_name: dozzle
    image: amir20/dozzle:latest
    environment:
      - 'PGID=${ID}'
      - 'PUID=${ID}'
      - 'TZ=${TZ}'
      - 'UMASK=022'
      - DOZZLE_LEVEL=info
      - DOZZLE_TAILSIZE=300
    # - DOZZLE_FILTER="status=running"
    restart: unless-stopped
    networks:
      - proxy
    command:
      - "--addr=:9999"
    security_opt:
      - 'no-new-privileges:true'
    ports:
      - '127.0.0.1:9999:9999'
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock:ro'  # Use Docker Socket Proxy instead for improved security
    labels:
      - "traefik.enable=true"
      - 'traefik.docker.network=proxy'
      - 'dockupdater.enable=true'
      ## HTTP Routers
      - 'traefik.http.routers.dozzle-rtr.entrypoints=https'
      - 'traefik.http.routers.dozzle-rtr.rule=Host(`dozzle.${DOMAIN}`)'
      - 'traefik.http.routers.dozzle-rtr.tls=true'
      - 'traefik.http.routers.dozzle-rtr.tls.certresolver=dns-cloudflare'
      ## Middlewares
      - 'traefik.http.routers.dozzle-rtr.middlewares=chain-authelia@file'
      ## HTTP Services
      - 'traefik.http.routers.dozzle-rtr.service=dozzle-svc'
      - 'traefik.http.services.dozzle-svc.loadbalancer.server.port=9999'