我正在尝试将主机目录装载到Docker容器中,以便在主机上完成的任何更新都反映到Docker集装箱中。

我哪里做错了什么。以下是我所做的:

kishore$ cat Dockerfile

FROM ubuntu:trusty
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
WORKDIR /test_container
VOLUME ["/test_container"]

kishore$树.├── Dockerfile文件└── 主文件夹├── tfile1.text├── tfile2.txt文件├── tfile3.txt文件└── tfile4.txt文件

1个目录,5个文件基肖尔$pwd/用户/kishore/tdockkishore$docker build--tag=k3_s3:最新。

Uploading context 7.168 kB
Uploading context
Step 0 : FROM ubuntu:trusty
 ---> 99ec81b80c55
Step 1 : RUN apt-get update
 ---> Using cache
 ---> 1c7282005040
Step 2 : RUN apt-get -y install git curl vim
 ---> Using cache
 ---> aed48634e300
Step 3 : CMD ["/bin/bash"]
 ---> Running in d081b576878d
 ---> 65db8df48595
Step 4 : WORKDIR /test_container
 ---> Running in 5b8d2ccd719d
 ---> 250369b30e1f
Step 5 : VOLUME ["/test_container"]
 ---> Running in 72ca332d9809
 ---> 163deb2b1bc5
Successfully built 163deb2b1bc5
Removing intermediate container b8bfcb071441
Removing intermediate container d081b576878d
Removing intermediate container 5b8d2ccd719d
Removing intermediate container 72ca332d9809

kishore$docker运行-d-v/Users/kishore/main_folder:/test_container k3_s3:最新c9f9a7e09c54ee1c2c966f15c963b4af320b5203b8c46689033c1ab8872a0漏洞$docker运行-i-t k3_s3:最新/bin/bash

root@0f17e2313a46:/test_container# ls -al
total 8
drwx------  2 root root 4096 Apr 29 05:15 .
drwxr-xr-x 66 root root 4096 Apr 29 05:15 ..

root@0f17e2313a46:/test_container#退出exitkishore$docker-vDocker版本0.9.1,内部版本867b2a9

我不知道如何检查boot2docker版本

问题和面临的问题:

如何将main_folder链接到docker容器中的test_container文件夹?我需要自动完成。如何在不真正使用run-d-v命令的情况下做到这一点?如果boot2docker崩溃会发生什么?Docker文件存储在哪里(除了Dockerfile)?


当前回答

[更新]截至2017年6月,Docker for Mac解决了其中所有令人讨厌的部分,您必须使用VirtualBox。它允许您使用/private前缀基本上映射本地主机上的所有内容。更多信息请点击此处。[/UPDATE]

目前所有的答案都是关于Boot2docker的。由于现在不赞成使用docker机器,这适用于docker机器:

首先,ssh到docker机器vm中,并创建要映射到的文件夹:

docker-machine ssh $MACHINE_NAME "sudo mkdir -p \"$VOL_DIR\""

现在将文件夹共享到VirtualBox:

WORKDIR=$(basename "$VOL_DIR")
vboxmanage sharedfolder add "$MACHINE_NAME" --name "$WORKDIR" --hostpath "$VOL_DIR" --transient

最后,再次ssh到docker机器中,并装载刚才共享的文件夹:

docker-machine ssh $MACHINE_NAME "sudo mount -t vboxsf -o uid=\"$U\",gid=\"$G\" \"$WORKDIR\" \"$VOL_DIR\""

注意:对于UID和GID,基本上可以使用任何整数,只要它们还没有使用。

这在OS X El Capitan上从docker机器0.4.1和docker 1.8.3开始测试。

其他回答

您是否可以通过boot2docker或类似方式在OS X上使用docker。

我也有过同样的经历——命令是正确的,但无论如何,容器中没有装入任何(合理的)内容。

事实证明,docker文档中已经对此进行了解释。当您键入docker run-v/var/logs/on/host:/var/logs/in/container。。。那么/var/logs/on/host实际上是从boot2docker VM映像映射的,而不是从Mac映射的。

您必须通过虚拟机将共享文件夹传输到实际主机(在我的情况下是Mac)。

如何将main_folder链接到docker容器中的test_container文件夹?

下面的命令是正确的,除非您在mac上使用boot2docker(取决于将来的更新),否则您可能会发现文件夹为空。有关更正此问题的教程,请参见mattes答案。

docker run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest

我需要自动运行,如何做到这一点使用run-d-v命令。

你真的离不开使用这些命令,它们是docker工作方式的内在特征。最好将它们放在shell脚本中,以避免重复编写。

如果boot2docker崩溃会发生什么?docker文件存储在哪里?

如果您设法使用-v arg并引用主机,则文件在主机上是安全的。

如果您使用了“docker build-t myimage”使用Dockerfile,您的文件将被烘焙到图像中。

我相信你的docker映像存储在boot2docker vm中。当我从VirtualBox中删除虚拟机时,我的图像消失了,我发现了这一点。(注意,我不知道Virtualbox是如何工作的,所以图像可能仍然隐藏在其他地方,只是docker看不到)。

为了在Windows 10中实现这一点,我必须从系统托盘中打开Docker设置窗口,然后转到共享驱动器部分。

然后,我选中了C旁边的复选框。Docker要求我的桌面凭据以获得写入我的用户文件夹的授权。

然后,我按照上面的示例以及设置页面上的示例运行docker容器,将其附加到容器中的/data。

docker run -v c:/Users/<user.name>/Desktop/dockerStorage:/data -other -options

对于希望在当前目录中装入文件夹的用户:

docker run -d --name some-container -v ${PWD}/folder:/var/folder ubuntu

我也遇到了同样的问题,我试图在docker上装载C:\Users\folder这是我如何在Docker工具箱命令行中执行的

 $ docker run -it --name <containername> -v /c/Users:/myVolData <imagename>