2017-04-06 119 views
2

我所处的环境:如何将当前目录挂载为只读,但仍允许在容器内进行更改?

  • 我想安装一个目录〜/ tmp目录/ mycode的到/ mycode的只读
  • 我希望能够在目录中编辑文件,所以我不能只要运行-v /my/local/path/tmp/mycode:/mycode
    • 我想,虽然,所以我不能安装它读取它不坚持在主机文件系统更改/写
  • 〜/ tmp目录/ mycode的相当大

基本上我希望能够编辑挂载的卷中的文件,但不会保留这些更改。

我当前的工作流程是创建使用dockerfile虚拟容器:

ADD . /mycode 

,然后执行该容器。

但是随着资源库的增长,这一步需要的时间越来越长,因为我能想到的唯一方法就是制作〜/ tmp/mycode的完整副本,以便能够处理容器中的文件。

我也想过安装目录并将其复制到容器中并提交该容器,但是这具有相同的问题。

有没有一种方法来运行码头容器,以便允许文件编辑而不需要在复制整个目录的主机上保留它们?

我正在使用最新的docker for mac,当前版本为17.03.1-ce-mac5(16048)。

+0

作为目录似乎是一个(git?)存储库,实际挂载它是否更容易读写,隐藏当前分支状态,允许主机文件系统更改,然后执行硬重置并取消先前存储返回到容器停止时的状态? –

+0

@ZathrusWriter可以工作,但错误的rm -rf .git会让这个策略非常创伤...... – enderland

回答

1

这是相当琐碎与码头工人和叠加的事:

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 

这应该从目录只读挂载的代码,并让到/ mnt/rocode是只读创建容器内的覆盖,但/ mycode是可写的。

确保你的内核是3.18+并且你在/ proc/filesystems中有覆盖。

相关问题