如何将当前目录挂载为只读,但仍允许在容器内进行更改?

我有这样的情况:

  • 我想安装一个目录〜/ 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。