我正在尝试将主机目录挂载到 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$ tree . ├── Dockerfile └── main_folder ├── tfile1.txt ├── tfile2.txt ├── tfile3.txt └── tfile4.txt 1 directory, 5 files kishore$ pwd /Users/kishore/tdock kishore$ docker build --tag=k3_s3:latest . 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 run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest c9f9a7e09c54ee1c2cc966f15c963b4af320b5203b8c46689033c1ab8872a0ea kishore$ docker run -i -t k3_s3:latest /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# exit exit kishore$ docker -v Docker version 0.9.1, build 867b2a9
问题,面临的问题:
run -d -v
有几种方法可以做到这一点。最简单的方法是使用 dockerfileADD命令,如下所示:
ADD
ADD . /path/inside/docker/container
但是,在构建 dockerfile 后对主机上的此目录所做的任何更改都不会显示在容器中。这是因为在构建容器时,docker 会将目录压缩为 a并将该上下文永久.tar上传到容器中。
.tar
第二种方法是您尝试的方式,即挂载卷。由于试图尽可能便携,您不能将主机目录映射到 dockerfile 中的 docker 容器目录,因为主机目录可能会根据您运行的机器而改变。要将主机目录映射到 docker 容器目录,您需要在使用-v时使用该标志docker run,例如:
-v
docker run
# Run a container using the `alpine` image, mount the `/tmp` # directory from your host into the `/container/directory` # directory in your container, and run the `ls` command to # show the contents of that directory. docker run \ -v /tmp:/container/directory \ alpine \ ls /container/directory