如何将当前目录挂载为只读,但仍允许在容器内进行更改?
我有这样的情况:
- 我想安装一个目录〜/ tmp / mycode到/ mycode readonly
- 我想能够编辑目录中的文件,所以我不能只运行
-v /my/local/path/tmp/mycode:/mycode
- 我希望它不会在主机文件系统上保留更改,但是无法读取/写入
- 〜/ tmp / mycode相当大
基本上我想能够编辑挂载的卷中的文件,但没有这些变化持续下去。
我目前的工作stream程是使用dockerfile创build一个虚拟容器:
ADD . /mycode
然后执行该容器。
然而随着版本库的增长,这个步骤需要更长和更长的时间来执行,因为我能想到的唯一方法是制作〜/ tmp / mycode的完整副本,以便能够处理容器中的文件。
我也想过挂载目录并将其复制到容器中并提交该容器,但是这具有相同的问题。
有没有一种方法来运行docker容器,允许文件编辑,而不必复制整个目录持久的主机?
我正在使用最新的Docker for Mac,目前版本为17.03.1-ce-mac5(16048)。
这对于docker和overlay来说相当简单:
docker run --name myenv --privileged -v /my/local/path/tmp/mycode:/mnt/rocode:ro -it ubuntu /bin/bash docker exec -d myenv /sbin/mount -t overlay overlay -o lowerdir=/mnt/rocode,upperdir=/mycode,workdir=/mnt/code-workdir /mycode
这应该从您的目录中读取代码,并在容器中创build覆盖,这样/ mnt / rocode是只读的,但/ mycode是可写的。
确保你的内核是3.18+,并且覆盖你的/ proc / filesystems。