docker - 在 play-with-docker.com 上测试 traefik
问题描述
在我自己的私人服务器上运行它之前,我尝试测试并使用traefik 。play-with-docker.com
但是,我无法获得一个使用 2 个容器的简单示例,请参阅docker-compose.yml
下面的文件。容器都以up
在其日志中没有任何错误的情况下启动。我可以在端口 80 上看到带有 subpath的traefik 仪表板/traefik
。但是我看不到带有子路径的端口 80 上的dozzle/dozzle
。
我的配置有什么问题?还是traefik根本无法正常工作play-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"
编辑 13.07.2019 - 附加信息
我在本地机器上使用 Docker Toolbox 尝试了 compose 文件的简化版本。还是同样的问题。如果我在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 等。
解决方案
如果我理解 dozzle 命令行选项“ --base=/doozle ”,则应该通过路径到达后端
:8083/dozzle
但是在您的前端规则中,您从初始请求中删除/删除“/doozle”:
"traefik.frontend.rule=PathPrefixStrip:/dozzle"
因此,您应该只使用PathPrefix代替。
推荐阅读
- maven - 从 Maven 并行构建中排除项目
- python - 将函数的输出存储到变量中
- java - 有没有办法配置 Spring Boot API 来设置传入请求的连接超时?
- java - java.util.Collections.emptyList() 方法在实际应用程序中到底在哪里使用?
- mysql - 如何从 SQL 中两列之间具有固定差异的表中选择数据
- tsql - 合并语句执行不匹配,即使它匹配
- node.js - 无法使用声明覆盖目录
- encryption - 如何编写库来解密某些东西而不用明文写密钥?
- apache-flink - FLINK-如何处理sql查询结果的逻辑
- stripe-payments - Stripe Terminal 中的申请费错误(直接收费)