Overlayfs卷到docker容器
我有一组目录,我想将其覆盖到容器中:Overlayfs卷到docker容器,docker,overlayfs,systemd-nspawn,Docker,Overlayfs,Systemd Nspawn,我有一组目录,我想将其覆盖到容器中: # On host /opt/a - bin - lib /opt/b - bin - lib /opt/c - bin - lib # In container /usr/local - bin - lib - cuda 我能够在主机上为/opt/{a,b,c}创建一个overlayfs挂载,并将其作为卷挂载到容器中的/usr/local,但是/usr/local/cuda将无法在容器中访问 我可以通过systemd
# On host
/opt/a
- bin
- lib
/opt/b
- bin
- lib
/opt/c
- bin
- lib
# In container
/usr/local
- bin
- lib
- cuda
我能够在主机上为/opt/{a,b,c}
创建一个overlayfs挂载,并将其作为卷挂载到容器中的/usr/local
,但是/usr/local/cuda
将无法在容器中访问
我可以通过systemd nspawn
直接实现这一点,方法如下:
systemd-nspawn --overlay /opt/a:/opt/b:/opt/c:/usr/local <other flags>
systemd nspawn--overlay/opt/a:/opt/b:/opt/c:/usr/local
这使得所有文件都可以作为容器中的合并装载,并将更改写入主机上的/opt/c
是否可以轻松地实现我想要的DOCKER?
< P>不。如果您熟悉主机工具来尝试这一点,请考虑在<代码> ChuloT 环境中运行它。 Docker无法合并图像内容、卷内容和主机系统目录。挂载的工作方式与普通Unixmount(8)命令相同:您正在挂载的东西完全隐藏了以前存在的内容,您只看到挂载的内容运行严重依赖于主机系统内容的容器也很少见。典型的做法是一个映像包含运行软件所需的所有应用程序和库代码;这样,即使主机上没有该软件,也可以在其他系统上运行它。也就是说,更典型的做法是直接在Dockerfile中安装所需的软件,比如为基于Debian/Ubuntu的图像安装
apt get install
。如果各种/opt
东西是您从源代码构建的东西,您可以使用从源代码安装它们,然后在最后阶段将--from=opt-a-build
复制到/usr/local
树中。谢谢您的回复。我想要实现的是,在主机上的最新linux内核上使用unix mount命令,在主机上使用mount-t overlay-o lowerdir=/opt/a:/opt/b:/opt/c、upperdir=/usr/local、workdir=/opt/workdir/usr/local
。我想这样做,但使用docker容器中的/usr/local
。该容器正在干净的环境中从源代码为我构建软件/opt/a
等表示我试图构建的软件(APT repos中不可用的软件包和版本)的依赖关系,我正在构建的软件包和版本能够很好地控制版本和配置。您应该将其安装在Dockerfile中,以便它包含在映像中;不要尝试从主机注入它。(如果您可以详细说明mount
命令,那么您可能可以docker volume创建一个具有这些精确选项的卷,但我不建议您这样设置。)