在Windows上,绑定装载卷在docker-compose中的行为与docker run不同

时间:2018-04-13 17:19:04

标签: docker docker-compose

启动Linux容器时(详情如下)。我看到docker run ...成功,但docker-compose up无法抱怨绑定挂载路径。感觉docker run绑定将卷挂载到linux VM(通过Hyper V)

Docker撰写错误

  

无法为服务registrator创建容器:b' Mount denied:   源路径" \\ var \\ run \\ docker.sock:/tmp/docker.sock"   不是有效的Windows路径'

以下是有关我如何启动容器的详细信息:

Docker Run(按预期工作):

docker run --network=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator consul://localhost:8500

Docker撰写:

registrator:
  image: gliderlabs/registrator
  command: "consul://consul:8500"
  network_mode: host
  volumes:
   - /var/run/docker.sock:/tmp/docker.sock

操作系统:Windows 10 1709(操作系统内部版本16299.371) 适用于Windows的Docker:18.04.0-ce Docker撰写:1.21.0

1 个答案:

答案 0 :(得分:5)

我一直在研究这个问题太久了。在这里问了一个问题,然后发现我的答案。 叹息我希望我学到的东西可以帮助别人。

我遇到了docker compose GitHub Issue #4303,其中一条指导就是设置这个环境变量:

SET COMPOSE_CONVERT_WINDOWS_PATHS=1

在调用docker-compose up的shell中执行此操作会使compose表现得像run一样。现在,容器绑定安装Linux VM主机路径,而不是尝试映射Windows主机路径。对我来说没有意义,但它确实有效。

来自Compose docs

  

COMPOSE_CONVERT_WINDOWS_PATHS   在卷定义中启用从Windows样式到Unix样式的路径转换。 Windows上的Docker Machine和Docker Toolbox的用户应始终设置此项。默认值为0.支持的值:true或1表示启用,false或0表示禁用。