我想从我的主机到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
感谢您的帮助!
答案 0 :(得分:2)
您可以通过某种方式隐藏文件,但是使用Docker卷时您所描述的内容是不可能的,因为容器上的目录是主机上目录的安装而不是正在复制的文件。
nocopy
修饰符适用于创建卷并且数据已存在于容器的路径中时,您可以指定是否希望在创建卷时复制该数据。
您可能需要设计卷结构,以便您创建的文件不在共享卷上。
答案 1 :(得分:1)
我知道这是一个老问题,但这可能会对人们有所帮助。
如果您想反映从主机到容器的修改,而不是相反,那将很难。
如果要获取代码的“快照”,则在构建映像时可以使用COPY或ADD将代码获取到容器内,这意味着您的代码必须位于构建上下文中。例如:
.
├── content_to_mount
| ├── stuff1.txt
| └── stuff2.txt
├── docker_stuff
| ├── docker.conf
| └── Dockerfile
└── other_stuff
如果具有这种文件树,则需要在根目录(可以在其中看到docker_stuff)中使用以下命令来构建docker映像:
docker build -f docker_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
中运行的修改将不会反映在主机上。