【发布时间】:2019-12-19 08:25:05
【问题描述】:
我正在尝试使仅在 Unices 上开发的应用程序在 Windows 上运行。它都是 dockerized 并且它使用 traefik 负载均衡器。用于运行 traefik 的 docker 卷如下所示:
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro,delegated
- ${PWD}/load_balancer/traefik.toml:/etc/traefik/traefik.toml:ro,delegated
第一卷在 Mac 或 Linux 上运行良好,但在 Windows 上可以吗? The application is failing (the load balancer is giving a 404) 可能与该卷有关。当我启动图像时,套接字看起来像一个套接字:
/ # ls -laF /var/run/docker.sock
srw-rw---- 1 root root 0 Sep 2 11:04 /var/run/docker.sock=
这行得通吗?有什么方法可以测试吗?这样做的正确方法是什么?
试图弄清楚这一点,我尝试用这个替换它:
volumes:
- //./pipe/docker_engine:/var/run/docker.sock
基于我在网上找到的各种文章和错误报告。 docker 镜像启动,但以同样的方式失败,现在在 docker 容器中它看起来像一个目录:
/ # ls -laF /var/run/docker.sock
total 4
drwxr-xr-x 2 root root 40 Sep 3 14:52 ./
drwxr-xr-x 1 root root 4096 Sep 3 14:57 ../
按照 Marc ABOUCHACRA 的回答,我尝试了:
volumes:
- type: npipe
source: ////./pipe/docker_engine
target: /var/run/docker.sock
consistency: delegated
但这也看起来像一个目录:
/ # ls -laF /var/run/docker.sock
total 4
drwxr-xr-x 2 root root 40 Sep 3 14:52 ./
drwxr-xr-x 1 root root 4096 Sep 3 14:57 ../
我也试过这个:
volumes:
- npipe:////./pipe/docker_engine:/var/run/docker.sock:ro,delegated
但失败并出现此错误:
ERROR: Volume npipe:////./pipe/docker_engine:/var/run/docker.sock:ro,delegated has incorrect format, should be external:internal[:mode]
整个docker-compose.yml 部分如下所示:
lb:
image: load-balancer
build: ${WORKSPACE}/go-home/load_balancer
ports:
- 80:80
- 443:443
links:
- wifi-ui-dev
- wifi-ui-prod
- portal
- wifi-api
env_file:
- .env
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro,delegated
- ${PWD}/load_balancer/traefik.toml:/etc/traefik/traefik.toml:ro,delegated
我的问题是关于在 Windows 主机上运行这个 Docker 映像,它是一个 Linux,运行 Docker for Windows。我知道我可以通过在另一台机器上安装 Linux 或在 Windows 机器上安装 VM 来在 Linux 主机上运行它,这是等效的。运行 Windows 来宾也不是我所追求的,以防万一有办法将套接字从 Windows 公开到 Windows。
【问题讨论】:
-
@TarunLalwani:那是我了解 /pipe/docker_engine 的地方,但两个链接都没有提到
volumes:,所以我不确定语法是什么。该语法不会崩溃,但我不确定它是否也有效(docker 映像不工作,但我现在不知道这是否与套接字或其他东西有关)。 -
能否提供整个 docker 文件,以便我们尝试弄清楚?
-
我认为该术语具有误导性——您绑定一个套接字并装载一个卷。您是否要安装卷?对于非常利基的任务,例如从容器管理 docker 守护程序作为 CI/CD 管道工具的一部分,可能需要绑定到 docker 套接字。如果你正在挂载一个卷,特别是你试图从容器中访问主机的目录,那么在 Windows 上有几种方法可以做到这一点。最简单的是通过 WSL?然后您可以保持所有 compose/dockerfiles 原样。如果你不能,那么你可以使用 powershell 中的 windows 路径,但你必须共享
标签: docker traefik docker-for-windows