Windows下Docker的--volume格式

9

我正在尝试重新利用工作中用于设置开发环境的Shell脚本,使其能够通过Git Bash在我的Windows环境上运行。

Shell脚本中容器的启动方式如下:

docker run \
--detach \
--name=server_container \
--publish 80:80 \
--volume=$PWD/var/www:/var/www \
--volume=$PWD/var/log/apache2:/var/log/apache2 \
--link=mysql_container:mysql_container \
--link=redis_container:redis_container \
web-server

当我按原样运行时,返回以下错误消息:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: invalid bind mount spec "/C/Users/username/var/docker/environments/development/scripts/var/log/apache2;C:\\Program Files\\Git\\var\\log\\apache2": invalid volume specification: '/C/Users/username/var/docker/environments/development/scripts/var/log/apache2;C:\Program Files\Git\var\log\apache2': invalid mount config for type "bind": invalid mount path: '\Program Files\Git\var\log\apache2' mount path must be absolute. See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

我做了很多谷歌搜索和文档阅读,但是Docker让我有些不知所措,我觉得我做错了。我尝试按照以下方式设置容器:

docker run \
--detach \
--name=server_container \
--publish 80:80 \
--volume=/c/users/username/var/www:/var/www \
--volume=/c/users/username/var/log/apache2:/var/log/apache2 \
--link=mysql_container:mysql_container \
--link=redis_container:redis_container \
web-server

仍然出现类似的错误消息。如果我去掉冒号:/var/www它就能运行,但它似乎没有正确映射那些目录,也就是说,它不知道 C:\users\username\var\www = /var/www

我知道我在这里错过了一些极其愚蠢的东西,但当我看文档时,我只能茫然。任何帮助将不胜感激。

3个回答

11

对于在Windows 10上使用Docker的人,路径中必须包含一个额外的/

docker run -it -v //c/Users/path/on/host:/app/path/in/docker/container command

(请注意在 c 附近多了一个额外的 /

如果您正在使用 Git Bash 并且使用 pwd,那么也需要在那里使用额外的 /

docker run -p 3000:3000 -v /app/node_modules -v /$(pwd):/app 09b10e9fda85`

(注意在$(pwd)前面加上/


1
经过几个小时的失败尝试,我只需要在$(pwd)之前加上一个/。哇,谢谢! - David Martínez Gil

5
在我发布问题的瞬间,我自己找到了答案。 这是正确的格式。
docker run \
--detach \
--name=server_container \
--publish 80:80 \
--volume=//c/users/username/var/www://var/www \
--volume=//c/users/username/var/log/apache2://var/log/apache2 \
--link=mysql_container:mysql_container \
--link=redis_container:redis_container \
web-server

应该再多搜索几分钟。


现在你能够访问这些文件吗?我尝试使用相同的方法,但无法看到Windows文件。docker run -v //c/temp/:/test alpine ls test temp.txtls /c/temp 'Encoding Time.csv' http1/ netstat.txt Projects/ selfcheck.json Stack/ UninstalItems.log 看起来Docker容器有它自己独立的c:\temp目录副本。 - Donald S

2
如果您想要将路径设置为相对路径,可以使用 pwd 和变量。例如:
CURRENT_DIR=$(pwd)    
docker run -v /"$CURRENT_DIR"/../../test/:/test alpine ls test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接