将卷覆盖到docker容器



我有一组目录,我想将它们覆盖安装到容器中:

# 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}创建一个重叠装载,并将其作为卷装载到容器中的/usr/local,但/usr/local/cuda在容器中将不可访问。

我可以直接用systemd-nspawn通过以下方式实现这一点:

systemd-nspawn --overlay /opt/a:/opt/b:/opt/c:/usr/local <other flags>

这使得所有文件都可以作为容器中/usr/local的合并装载使用,并将更改写入主机上的/opt/c

有可能用docker轻松实现我想要的吗?

否。如果您对主机工具足够熟悉,可以尝试这样做,请考虑在chroot环境中运行它。

Docker无法合并映像内容、卷内容和主机系统目录。挂载的工作方式与普通Unixmount(8(命令相同:您要挂载的东西完全隐藏了以前的内容,您只能看到挂载的内容。

运行严重依赖主机系统内容的容器也是不常见的。典型的做法是,图像包含运行软件所需的所有应用程序和库代码;这样,即使主机上没有该软件,也可以在不同的系统上运行它。也就是说,更典型的做法是直接在Dockerfile中安装所需的软件,比如为基于Debian/Uubuntu的映像安装apt-get install。如果各种/opt都是从源代码构建的东西,那么可以使用多阶段构建从源代码安装它们,然后在最后阶段将COPY --from=opt-a-build安装到/usr/local树中。

相关内容

  • 没有找到相关文章

最新更新