4

我有一种情况:

  • 我想将目录 ~/tmp/mycode 挂载到 /mycode 只读
  • 我希望能够编辑目录中的文件,所以我不能只运行-v /my/local/path/tmp/mycode:/mycode
    • 我希望它不会在主机文件系统上保留更改,所以我无法以读/写方式挂载它
  • ~/tmp/mycode 相当大

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

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

ADD . /mycode

然后执行该容器。

但是,随着存储库的增长,执行此步骤所需的时间越来越长,因为我能想到的唯一方法是制作 ~/tmp/mycode 的完整副本,以便能够操作容器中的文件。

我还考虑过挂载目录并将其复制到容器中并提交该容器,但这有同样的问题。

有没有一种方法可以运行 docker 容器来允许文件编辑而无需将它们保存在主机上而无需复制整个目录?

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

4

1 回答 1

1

这对于 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

这应该以只读方式安装目录中的代码并在容器内创建覆盖,以便 /mnt/rocode 是只读的,但 /mycode 是可写的。

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

于 2017-04-07T05:15:00.850 回答