【发布时间】:2020-09-01 05:59:35
【问题描述】:
我无法让基本的 Traefik 路由设置正常工作。
我的目标是使用两个 helloworld 应用程序(每个应用程序不同以区分)获得基本路由,两者都在端口 80 上,例如:
- demo1.localhost -> helloworld1
- demo2.localhost -> helloworld2
如果我通过docker run 单独运行它们,每个图像都可以正常工作。
使用我的项目目录 /app 中的 Powershell,当我运行 docker-compose up 时,我得到以下信息:
Traefik 服务启动,我可以正常访问仪表板但路由表没有显示我的路线。 demo1 和 demo2 启动正常,但显然我无法连接到它们,因为路由不起作用。
即使所有服务都成功启动 - 我反复收到以下错误:
traefik | ... "Failed to create a client for docker, error: protocol not available" providerName=docker
traefik | ... "Provider connection error protocol not available, retrying ..." providerName=docker
我在下面包含了我的 docker-compose.yml 文件,这是我的目录中唯一的文件 /app。
docker-compose.yml:
# app/docker-compose.yml
version: '3.8'
networks:
myweb:
driver: nat
services:
proxy:
image: traefik:v2.3.0-rc4-windowsservercore-1809
container_name: traefik
ports:
- "80:80"
- "8080:8080"
volumes:
- source: '\\.\pipe\docker_engine'
target: '\\.\pipe\docker_engine'
type: npipe
command:
- "--api.insecure=true"
- "--providers.docker"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
networks:
- myweb
labels:
- "traefik.http.routers.dashboard.rule=Host(`dash.localhost`)"
- "traefik.docker.network=app_myweb"
demo1:
image: helloworld:1
container_name: demo1
labels:
- "traefik.enable=true"
- "traefik.docker.network=app_myweb"
- "traefik.port=80"
- "traefik.http.routers.demo1.rule=Host(`demo1.localhost`)"
# Have tried this below, doesn't help.
# volumes:
# - source: '\\.\pipe\docker_engine'
# target: '\\.\pipe\docker_engine'
# type: npipe
networks:
- myweb
depends_on:
- proxy
demo2:
image: helloworld:2
container_name: demo2
labels:
- "traefik.enable=true"
- "traefik.docker.network=app_myweb"
- "traefik.port=80"
- "traefik.http.routers.demo2.rule=Host(`demo2.localhost`)"
networks:
- myweb
depends_on:
- proxy
我在某处看到一个建议,我应该在 Docker 桌面设置中启用设置 "Expose daemon on tcp://localhost:2375 without TLS",我已经这样做了,但没有帮助。
我的设置是:
- 适用于 Windows 的 Docker 桌面 (v19.03.12)
- Docker 使用 Windows 容器
- Windows 10(10.0.18363 内部版本 18363)
问题 #1:
有人知道是什么原因造成的吗?
问题 #2:
请注意,在我的文件中,我还为仪表板设置了一条路由,从 dash.localhost 路由到 localhost:8080/dashboard,但即使这样也不起作用。知道如何让它工作吗?我需要告诉它从 80->8080 路由到仪表板吗?
【问题讨论】: