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


当前回答

我只是在尝试让我的SailsJS应用程序在Docker容器中运行,以保持我的物理机器清洁。

我正在使用以下命令在/app下装载我的SailsJS/NodeJS应用程序:

cd my_source_code_folder
docker run -it -p 1337:1337 -v $(pwd):/app my_docker/image_with_nodejs_etc

其他回答

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

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

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

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

注意,在Windows中,您必须提供绝对路径。

主机:Windows 10容器:Tensorflow笔记本

下面对我有用。

docker run -t -i -v D:/projects/:/home/chankeypathak/work -p 8888:8888 jupyter/tensorflow-notebook /bin/bash

boot2docker和VirtualBox来宾添加如何将/Users装入boot2docker

https://medium.com/boot2docker-lightweight-linux-for-docker/boot2docker-together-with-virtualbox-guest-additions-da1e3ab2465c

tl;dr使用VirtualBox Guest构建自己的自定义boot2docker.iso添加(参见链接)或下载http://static.dockerfiles.io/boot2docker-v1.0.1-virtualbox-guest-additions-v4.3.12.iso并将其保存到~/.boot2docker/boot2docker.iso。

这个问题的用户使用的是Docker版本0.9.1,构建867b2a9,我将为您提供Docker版本>=17.06的答案。

您所希望的,保持本地目录在容器目录中同步,是通过使用类型bind装载卷来实现的。这将绑定源(您的系统)和目标(docker容器)目录。这几乎与在linux上安装目录相同。

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

--mount:由多个键值对组成,用逗号分隔。每个键/值对采用<key>=<value>元组的形式。--mount语法比-v或--volume更详细,但键的顺序并不重要,标志的值更容易理解。装载的类型,可以是bind、volume或tmpfs。(我们将使用bind)装载源。对于绑定装载,这是Docker守护程序主机上文件或目录的路径。可以指定为source或src。目标将文件或目录装入容器的路径作为其值。可以指定为destination、dst或target。

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

    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

您还需要处理文件权限,请参阅本文。

我发现,任何位于系统指令下的目录(如/var、/usr、/etc)都不能安装在容器下。

该指令应位于用户的空格处-v开关指示docker守护进程将本地目录装载到容器,例如:

docker run -t -d -v /{local}/{path}:/{container}/{path} --name {container_name} {imagename}