如何在Docker容器中装载主机目录?

我正在尝试将一个主机目录挂载到Docker容器中,以便在主机上完成的任何更新都反映到Docker容器中。 Google搜索并阅读码头链接后,我无法成功。

有人可以指出我在哪里做错了。 这是我做的

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#退出退出

kishore$ docker -v
Docker version 0.9.1, build 867b2a9

  • 我不知道如何检查boot2docker版本
  • 面临的问题,问题:

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

  • 有几种方法可以做到这一点。 最简单的方法是使用dockerfile ADD命令,如下所示:

    ADD . /path/inside/docker/container
    

    但是,在构建dockerfile后在主机上对此目录所做的任何更改都不会显示在容器中。 这是因为在构建容器时,docker将目录压缩为.tar并将该上下文永久上传到容器中。

    第二种方法是尝试执行此操作,即装入卷。 由于尝试尽可能便携,因此无法将主机目录映射到dockerfile中的docker容器目录,因为主机目录可能会根据您运行的计算机而发生变化。 要将主机目录映射到Docker容器目录,需要在使用docker run时使用-v标志,如下所示:

    docker run -v /host/directory:/container/directory -other -options image_name command_to_run
    

    2个连续的坐骑:我猜这里的许多帖子可能会使用两个boot2docker,原因是你没有看到任何东西,因为你正在从boot2docker挂载一个目录而不是你的主机。 你基本上需要2次连续的挂载:第一次从你的主机挂载一个目录到你的系统,第二次挂载从boot2docker到你的容器的新目录,如下所示:

    1.在boot2docker上挂载本地系统

    sudo mount -t vboxsf hostfolder /boot2dockerfolder
    

    2.在linux容器上挂载boot2docker文件

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t  imagename
    

    那么当你ls里面containerfolder你会看到你hostfolder的内容


    这个问题的用户使用Docker version 0.9.1, build 867b2a9 ,我会给你一个码头版本> = 17.06的答案。

    你想要什么,保持本地目录在容器目录内同步,是通过使用bind类型挂载卷来完成的。 这将绑定源(您的系统)和目标(在docker容器)目录。 这几乎与在Linux上安装目录相同。

    根据Docker文档,现在mount适当的命令而不是-v 。 这是它的文档:

  • --mount :由多个键值对组成,用逗号分隔。 每个键/值对都采用<key>=<value>元组的形式。 --mount语法比-v--volume更冗长,但键的顺序并不重要,并且标志的值更易于理解。

  • mount的type ,可以是bindvolumetmpfs 。 (我们将使用绑定

  • 山的source 。 对于绑定挂载,这是Docker守护程序主机上文件或目录的路径。 可以指定为sourcesrc

  • destination将文件或目录将安装在容器中的路径作为其值。 可能被指定为destinationdsttarget

  • 因此,要使用/test_container (target)装载当前目录(源代码),我们将使用:

        docker run -it --mount src="$(pwd)",target=/test_container,type=bind k3_s3
    

    如果这些装载参数有空格,则必须在它们周围加引号。 当我知道他们不这样做时,我会使用`pwd`代替:

        docker run -it --mount src=`pwd`,target=/test_container,type=bind k3_s3
    

    您还必须处理文件许可权,请参阅这篇文章。

    链接地址: http://www.djcxy.com/p/18235.html

    上一篇: How to mount host directory in docker container?

    下一篇: How to get into a docker container?