Docker和nocopy

Docker和nocopy,docker,volume,mount,Docker,Volume,Mount,我想将一个目录从我的主机装载到Docker容器,并在容器内进行一些修改。但是,当我修改挂载点上的内容时,这些更改也会反映在主机上 例如: $ docker run -d --name webserver01 -v /home/guest/app:/app 之后,我在/app中的容器内做了一些更改 $ docker exec -ti webserver01 'touch /app/test.txt' test.txt文件是在主机上和容器内创建的(其思想是只在容器内创建文件) 我试图使用标志no

我想将一个目录从我的主机装载到Docker容器,并在容器内进行一些修改。但是,当我修改挂载点上的内容时,这些更改也会反映在主机上

例如:

$ docker run -d --name webserver01 -v /home/guest/app:/app
之后,我在/app中的容器内做了一些更改

$ docker exec -ti webserver01 'touch /app/test.txt'
test.txt文件是在主机上和容器内创建的(其思想是只在容器内创建文件)

我试图使用标志
nocopy
,但出现以下错误:

$ docker run -d --name webserver01 -v /home/guest/app:/app:nocopy
docker: Error response from daemon: Invalid bind mount spec "/home/guest/app:/app:nocopy": invalid mode: nocopy.
Docker版本

$ docker --version
Docker version 1.11.1, build 5604cbe/1.11.1

谢谢你的帮助

可能有某种方法可以隐藏文件,但对于Docker卷,您所描述的是不可能的,因为容器上的目录是主机上目录的装载,而不是要复制的文件

nocopy
修饰符用于创建卷时,如果容器路径中已经存在数据,则可以指定创建卷时是否要复制该数据


您可能需要设计卷结构,以便创建的文件不在共享卷上。

我知道这是一个老问题,但它可能会帮助人们

如果您想将修改从主机反映到容器,而不是相反,那么这将很困难

如果要获取代码的“快照”,可以在构建映像时使用“复制”或“添加”在容器中获取代码,这意味着您的代码必须位于构建上下文中。例如:

.
├── content_to_mount
|   ├── stuff1.txt
|   └── stuff2.txt
├── docker_stuff
|   ├── docker.conf
|   └── Dockerfile
└── other_stuff
如果您有这种类型的文件树,您将需要在根目录(您可以在其中看到docker_stuff)中使用以下命令来构建docker映像:

docker build-f docker\u stuff/Dockerfile.

在Dockerfile中,您会有如下内容:

COPY content_to_mount app
如果你的应用程序的代码真的在你家里,那可能是“危险的”,因为你不应该为docker构建太大的上下文

另一个解决方案,但在这个过程中会有点奇怪,就是像这样装载东西:

$docker run-d--name webserver01-v/home/guest/app:/ref/app

并且在容器中有一个特定的入口点,该入口点执行以下操作:

cp-R/ref/app/app


然后,你会有你的参考代码,从主机挂载的代码,在
/ref/app
中,您将在
/app
中运行的修改不会反映在主机上。

我尝试了另一种方法,使用Dockerfile上的ADD命令复制文件,但文件位于与Dockerfile不同的位置,Docker不允许这样做:(链接到
nocopy
官方文档:为清晰起见。在撰写规范中更新了到
nocopy
文档的链接: