首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖文件系统卷到停靠容器

覆盖文件系统卷到停靠容器
EN

Stack Overflow用户
提问于 2020-10-05 22:41:57
回答 1查看 249关注 0票数 0

我有一组目录,我希望将它们覆盖挂载到一个容器中:

代码语言:javascript
复制
# 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直接实现这一点,方法如下:

代码语言:javascript
复制
systemd-nspawn --overlay /opt/a:/opt/b:/opt/c:/usr/local <other flags>

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

有没有可能用docker轻松实现我想要的东西?

EN

回答 1

Stack Overflow用户

发布于 2020-10-06 01:26:51

不是的。如果您对主机工具足够熟悉,可以考虑在chroot环境中运行它。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64210858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档