在Windows上使用Docker Toolbox挂载文件

22

我是一个Docker的初学者,使用的是Windows机器。但是我在使用volumes挂载文件时遇到了问题。文档关于在OSX和Windows上挂载文件有以下说明:

官方Docker文档

注意:如果你在Mac或Windows上使用Docker Machine,则Docker守护程序仅能有限地访问你的OS X/Windows文件系统。Docker Machine尝试自动共享你的 /Users(OS X)或C:\Users(Windows)目录-因此,你可以使用docker run -v /Users/<path>:/<container path> ... (OS X)或 docker run -v /c/Users/<path>:/<container path ...(Windows)来挂载文件或目录。而所有其他路径都来自于你的虚拟机文件系统。

我有一个小的nginx Dockerfile:

FROM centos:6.6
MAINTAINER afym
ENV WEBPORT 80
RUN yum -y update; yum clean all
RUN yum -y install epel-release; yum clean all
RUN yum -y install nginx; yum clean all
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
VOLUME /usr/share/nginx/html
EXPOSE $WEBPORT
CMD [ "/usr/sbin/nginx" ]

创建一个简单的容器

docker run -d --name simple -p 8082:80 ng1

8875448c01a4787f1ffe4c4c5c492efb039e452eff957391ac52a08915e18d66

enter image description here

创建一个带有卷的容器

我的Windows主机目录

在此输入图片描述

使用 -v 选项创建 docker 容器

docker run -d --name simple2 -v /c/Users/src:/usr/share/nginx/html -p 8082:80 ng1
无效的值“C:\Users\src;C:\Program Files\Git\usr\share\nginx\html” 
for flag -v: bad mount mode specified 
: \Program Files\Git\usr\share\nginx\html
请查看 'C:\Program Files\Docker Toolbox\docker.exe run --help'。

检查 ng1 镜像

docker inspect ng1

在此输入图片描述

我在创建带有卷的 Docker 容器时出了什么问题?

谢谢。


你是在 boot2docker VM 外运行容器吗? - hassansin
由于您正在使用 Windows,并且您说自己是Docker的初学者,我想建议您请看一下Kinematic。 这是一个清晰易懂的方式来理解挂载卷管理容器等等。希望能对您有所帮助。 :) 祝好! - chanakya devraj
刚刚意识到即使你有正确的挂载配置,docker inspect ng1 仍然会显示 **"Volumes" { "/usr/share/nginx/html": {}}**。 - 689
4个回答

37

尝试在卷的后面添加/并运行它,例如:

docker run -d --name simple2 -v /c/Users/src://usr/share/nginx/html -p 8082:80 ng1

甚至对于主机操作系统而言,如下所示:

docker run -d --name simple2 -v //c/Users/src://usr/share/nginx/html -p 8082:80 ng1

由于这个问题

这是MSYS环境在将POSIX路径映射为Windows路径后传递到可执行程序之前所做的事情。


顺便提一下,对于Windows系统,如果您在挂载卷时没有指定源路径,那么docker inspect报告的源路径是在运行docker的虚拟机中,您可以通过docker-machine ssh访问该虚拟机或通过VirtualBox或其他提供程序访问该虚拟机。 - Spencer Williams

4

根据原帖内容:

官方的Docker文档

注意:如果你在Mac或Windows上使用Docker Machine,那么你的Docker守护程序只能有限地访问你的OS X / Windows文件系统。 Docker Machine会尝试自动共享您的/Users(OS X)或C:\Users(Windows) 目录 - 因此,您可以使用
docker run -v /Users/:/ ... (OS X)
或者
docker run -v /c/Users/:/

但是,如果你想要访问其他目录,你需要在虚拟机设置中添加一个新的共享文件夹(设置 > 共享文件夹 > 添加共享)。

在那里添加一个新的共享(只有在停止虚拟机之前才能进行,docker-machine stop):

path C:\Projects
name c/Projects
autoMount yes

或者直接编辑vbox配置文件
C:\ Users \<username> \ .docker \ machine \ machines \ default \ default \ default.vbox

<SharedFolders>中添加以下行

<SharedFolder name="c/Projects" hostPath="\\?\c:\Projects" writable="true" autoMount="true"/>

重新启动机器:

docker-machine stop
docker-machine start

现在,也可以挂载以基础目录C:\Projects为根目录的目录。
docker run -v //c/Projects/myApp://myApp <myImage>

3

对于使用 Docker 版本大于1.12的人,如果遇到这个问题,需要注意以下事项。我曾经花费了30分钟来解决这个问题,最后才发现你必须首先通过 Docker 设置明确共享驱动器,具体请参见:https://docs.docker.com/docker-for-windows/#/shared-drives


12
请注意,这是针对Docker for Windows而非Docker Toolbox的。 - Michel Jung

0

如果您只是想访问本地驱动器,MINGW32 Docker Toolbox终端会将每个驱动器的根目录放在/<drive-letter>中,因此驱动器C:\将位于/c/


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