我正在尝试将主机目录装载到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)?


当前回答

对于Windows 10用户,将装载点放在C:\users/目录中很重要。我花了好几个小时才把它弄好。这篇文章有所帮助,但最初并不明显,因为Windows 10的解决方案是对公认答案的评论。我是这样做的:

docker run -it -p 12001:80 -v //c/Users/C/Desktop/dockerStorage:/root/sketches \
<your-image-here> /bin/bash

然后要测试它,可以在图像中执行echo test>hostTest.txt。您应该能够在位于C:\Users/C/Desktop/dockerStorage/的本地主机文件夹中看到此新文件。

其他回答

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

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

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

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

使用命令行:

docker run -it --name <WHATEVER> -p <LOCAL_PORT>:<CONTAINER_PORT> -v <LOCAL_PATH>:<CONTAINER_PATH> -d <IMAGE>:<TAG>

使用docker-compose.yaml:

version: '2'
  services:
    cms:
       image: <IMAGE>:<TAG>
       ports:
       - <LOCAL_PORT>:<CONTAINER_PORT>
       volumes:
       - <LOCAL_PATH>:<CONTAINER_PATH>

假设:

图片:k3_s3标签:最新本地端口:8080容器端口:8080LOCAL_PATH:/要装载的卷容器路径:/mnt

示例:

首先创建要装载的/卷。(如果存在,则跳过)

$ mkdir -p /volume-to-mount

docker compose-f docker-compose.yaml up-d

version: '2'
  services:
    cms:
       image: ghost-cms:latest
       ports:
       - 8080:8080
       volumes:
       - /volume-to-mount:/mnt

验证容器:

docker exec -it CONTAINER_ID ls -la /mnt

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

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

您可以从cli中使用-v选项,该工具无法通过Dockerfile使用

docker运行-t-i-v<host_dir>:<container_dir>ubuntu/bin/bash

其中host_dir是要装载的主机目录。如果容器的目录不存在,您不必担心,docker会创建它。

如果您从主机(在root权限下)对host_dir进行任何更改,则容器将看到它,反之亦然。

对于Windows 10用户,将装载点放在C:\users/目录中很重要。我花了好几个小时才把它弄好。这篇文章有所帮助,但最初并不明显,因为Windows 10的解决方案是对公认答案的评论。我是这样做的:

docker run -it -p 12001:80 -v //c/Users/C/Desktop/dockerStorage:/root/sketches \
<your-image-here> /bin/bash

然后要测试它,可以在图像中执行echo test>hostTest.txt。您应该能够在位于C:\Users/C/Desktop/dockerStorage/的本地主机文件夹中看到此新文件。