Traefik + Docker for Windows: Failed to create a client for docker, error: protocol not available & Provider connection error protocol not available
Traefik + Docker for Windows: Failed to create a client for docker, error: protocol not available & Provider connection error protocol not available
我在使用基本的 Traefik 路由设置时遇到问题。
我的目标是使用两个 helloworld 应用程序(每个应用程序不同以区分)获得基本路由,都在端口 80 上,例如:
- demo1.localhost -> helloworld1
- demo2.localhost -> helloworld2
如果我通过 docker run
隔离地 运行 它们,则每个图像都可以正常工作。
从我的项目目录 /app
使用 Powershell,当我 运行 docker-compose up
我得到以下信息:
Traefik 服务启动,我可以很好地访问仪表板但是路由 table 不显示我的路由 。 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"
,我已经这样做了,但没有帮助。
我的设置是:
- Docker Windows
桌面版 (v19.03.12)
- Docker 使用 Windows 容器
- Windows10(10.0.18363 内部版本 18363)
问题 #1:
有人知道是什么导致了这个问题吗?
问题 #2:
请注意,在我的文件中,我还为仪表板设置了一条路由,从 dash.localhost 路由到 localhost:8080/dashboard,但即使这样也不起作用。知道如何让它工作吗?我需要告诉它从 80->8080 路由到仪表板吗?
根据他们 GitHub 上的 ticket,您似乎是:
- Traefik 命令行中缺少
--providers.docker.endpoint=npipe:////./pipe/docker_engine
- 在 Docker 期待
.\pipe\docker_engine
时分享 \.\pipe\docker_engine
尝试进行这两项更改,看看这是否有助于 Traefik 连接到您的 Docker 守护程序。 None 你的路线将工作,直到 Traefik 可以与 Docker 交谈以读取你的容器的标签。
我在使用基本的 Traefik 路由设置时遇到问题。
我的目标是使用两个 helloworld 应用程序(每个应用程序不同以区分)获得基本路由,都在端口 80 上,例如:
- demo1.localhost -> helloworld1
- demo2.localhost -> helloworld2
如果我通过 docker run
隔离地 运行 它们,则每个图像都可以正常工作。
从我的项目目录 /app
使用 Powershell,当我 运行 docker-compose up
我得到以下信息:
Traefik 服务启动,我可以很好地访问仪表板但是路由 table 不显示我的路由 。 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"
,我已经这样做了,但没有帮助。
我的设置是:
- Docker Windows 桌面版 (v19.03.12)
- Docker 使用 Windows 容器
- Windows10(10.0.18363 内部版本 18363)
问题 #1:
有人知道是什么导致了这个问题吗?
问题 #2:
请注意,在我的文件中,我还为仪表板设置了一条路由,从 dash.localhost 路由到 localhost:8080/dashboard,但即使这样也不起作用。知道如何让它工作吗?我需要告诉它从 80->8080 路由到仪表板吗?
根据他们 GitHub 上的 ticket,您似乎是:
- Traefik 命令行中缺少
--providers.docker.endpoint=npipe:////./pipe/docker_engine
- 在 Docker 期待
.\pipe\docker_engine
时分享
\.\pipe\docker_engine
尝试进行这两项更改,看看这是否有助于 Traefik 连接到您的 Docker 守护程序。 None 你的路线将工作,直到 Traefik 可以与 Docker 交谈以读取你的容器的标签。