首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在停靠器卷中创建文件的硬链接

如何在停靠器卷中创建文件的硬链接
EN

Stack Overflow用户
提问于 2019-03-27 15:05:09
回答 1查看 6.8K关注 0票数 6

我正在进行重构和“文档化”,这是一个由shell脚本、C++二进制文件和各种开源包(其中包括httpd)组成的遗留应用程序。

有方法在码头容器中创建指向停靠卷中文件的硬链接吗?

我计划按以下方式设计容器:

代码语言:javascript
复制
services:
  legacy-app:
    image: my-legacy-app
    volumes:
      - http-files:/var/www/html/

  httpd:
    image: httpd:2.4
    volumes:
      - http-files:/usr/local/apache2/htdocs/

volumes:
  http-files:

遗留应用程序中的一些init脚本在/var/www/html/目录中创建硬链接,指向文件系统中的其他文件。它们现在返回以下错误:

代码语言:javascript
复制
ln: creating hard link `/var/www/html/1/application' to `/home/conf/application': Invalid cross-device link

我试着用符号链接,它起作用了。但是,在这里选择硬链接的原因是,一旦所有指向它的链接都被删除,文件就会被删除。

有没有一种方法可以在码头上创建硬链接?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-27 22:45:14

不,没有办法做你想做的事。

问题是Linux禁止跨不同文件系统的硬链接。在您的示例中,/home/conf/application属于容器的根文件系统,它被挂载在/ (可能是overlay挂载,或aufs或其他什么东西),而卷(/var/www/html/和该目录下的所有内容)属于另一个文件系统,该文件系统位于主机的/var/lib/docker目录下(或卷位于主机的任何位置)。

但这还不是全部。要强制执行“无跨文件系统硬链接”限制,当您尝试创建硬链接时,内核会检查, to which the source and the destination belong, are the same。这意味着,即使源和目标属于同一个文件系统,但也属于不同的挂载点,硬链接的创建仍然是被禁止的。

其结果是您无法在不同的Docker卷之间创建硬链接,即使这些卷属于同一个文件系统。最后,即使您将相同的卷安装到容器中的不同位置,仍然不能在这些位置之间创建硬链接,因为它们仍然属于不同的挂载。

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

https://stackoverflow.com/questions/55380443

复制
相关文章

相似问题

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