我正在尝试让一个只在类Unix系统开发过的应用程序在Windows上运行。它已经被容器化并使用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上呢?应用程序失败(负载均衡器返回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 for Windows主机上运行Linux Docker映像。我知道我可以在另一台机器上安装Linux或在Windows机器上安装虚拟机来运行它,这是等效的。我也不想运行Windows guests,以防有一种方法可以将Windows套接字暴露给仅限Windows。