You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server 2016上Traefik无法连接Docker守护进程求助

问题:Traefik无法连接Windows Server 2016上的本地Docker守护进程

我正尝试在Windows Server 2016服务器上运行Traefik,但它无法连接本地Docker守护进程,出现以下错误:

traefik_1 | time="2018-05-17T11:21:25-04:00" level=error msg="Failed to retrieve information of the docker client and server host: error during connect: Get http://192.168.32.1:2376/v1.24/version: dial tcp 192.168.32.1:2376: connectex: No connection could be made because the target machine actively refused it."

我的daemon.json文件内容为:

{"graph": "E:\\Docker"}

以下是c:\>docker system info的输出结果:

Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 10
Server Version: 17.06.2-ee-10
Storage Driver: windowsfilter
 Windows:
Logging Driver: json-file
Plugins:
 Volume: local
 Network: l2bridge l2tunnel nat null overlay transparent
 Log: awslogs etwlogs fluentd json-file logentries splunk syslog
Swarm: inactive
Default Isolation: process
Kernel Version: 10.0 14393 (14393.2214.amd64fre.rs1_release_1.180402-1758)
Operating System: Windows Server 2016 Standard
OSType: windows
Architecture: x86_64
CPUs: 4
Total Memory: 2.386GiB
Name: dockerServer
ID: QOKM:O5QE:XOMZ:YNQN:JGT2:XAWN:DIUG:3K3H:M725:CADH:G6NE:Y5RK
Docker Root Dir: E:\Docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

以下是API版本请求的输出:

PS C:\Windows\system32> invoke-webrequest http://192.168.32.1:2376/v1.24/version
StatusCode : 200
StatusDescription : OK
Content : {"Platform":{"Name":""},"Components":[{"Name":"Engine","Version":"17.06.2-ee-10","Details":{"ApiVersion":"1.30","Arch":"amd64","BuildTime":"2018-04-27T00:54:58.493613431+00:00","Experimental":"false",...
RawContent : HTTP/1.1 200 OK
Api-Version: 1.30
Docker-Experimental: false
Ostype: windows
Content-Length: 633
Content-Type: application/json
Date: Tue, 22 May 2018 11:53:35 GMT
Server: Docker/17.06.2-ee-10
...
Forms : {}
Headers : {[Api-Version, 1.30], [Docker-Experimental, false], [Ostype, windows], [Content-Length, 633]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : System.__ComObject
RawContentLength : 633

请问有什么解决办法吗?


解决办法

我之前在Windows Server上部署Traefik时遇到过类似的问题,结合你的情况,给你几个可行的思路:

1. 使用npipe协议连接Docker守护进程(推荐)

在Windows环境下,容器访问宿主机的Docker守护进程,最可靠的方式是使用命名管道(npipe),而不是TCP。如果你的Traefik是通过Docker Compose运行的,需要调整配置:

  • 在Compose文件中挂载Windows的Docker管道,并指定Traefik的Docker端点为npipe路径:
version: '3'
services:
  traefik:
    image: traefik:v1.7  # 匹配你使用的Traefik版本(从日志看是旧版,v1.7系列更兼容)
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      # 挂载宿主机的Docker命名管道到容器内
      - "//./pipe/docker_engine://./pipe/docker_engine"
      # 如果有自定义配置文件也挂载进来
      - "./traefik.toml:/etc/traefik/traefik.toml"
    command:
      - "--api"
      - "--docker"
      - "--docker.endpoint=npipe:////./pipe/docker_engine"
      - "--docker.exposedbydefault=false"
  • 如果用的是toml配置文件,在[docker]段添加:
[docker]
endpoint = "npipe:////./pipe/docker_engine"
exposedByDefault = false

2. 修正TCP连接的配置

如果你坚持使用TCP连接,需要解决容器到宿主机的网络可达性问题:

  • 更新Docker守护进程配置:在daemon.json中添加TCP监听的hosts,确保Docker在所有网卡上监听2376端口:
{
  "graph": "E:\\Docker",
  "hosts": ["npipe:////./pipe/docker_engine", "tcp://0.0.0.0:2376"]
}

修改后必须重启Docker服务才能生效。

  • 调整Traefik的端点地址:在容器内,用host.docker.internal代替192.168.32.1,这个地址是Docker for Windows提供的宿主机别名,容器内可以直接解析到宿主机:
    • 在Traefik命令行参数中设置:--docker.endpoint=http://host.docker.internal:2376/v1.30(注意API版本要匹配你的Docker版本,你的Docker API是1.30,而不是你之前用的1.24)

3. 检查防火墙规则

虽然你本地能访问192.168.32.1:2376,但容器的流量可能被Windows防火墙拦截。可以临时关闭防火墙测试是否能连接,如果可行,再添加一条允许容器网络访问2376端口的入站规则。

4. 匹配Traefik与Docker的API版本

你的Docker API版本是1.30,但Traefik默认请求的是1.24,版本不匹配也可能导致连接问题。在Traefik配置中显式指定API版本:

  • 命令行参数:--docker.apiVersion=1.30
  • 或者在toml配置中:
[docker]
apiVersion = "1.30"

内容的提问来源于stack exchange,提问作者user1401809

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:23:16