gpt4 book ai didi

docker - 如何在 Docker 卷中创建指向文件的硬链接(hard link)

转载 作者:行者123 更新时间:2023-12-02 08:53:41 29 4
gpt4 key购买 nike

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

有没有办法在 Docker 容器中创建指向 Docker 卷中文件的硬链接(hard link)?

我计划按如下方式构建容器:

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:

旧应用程序中的某些初始化脚本在 /var/www/html/ 目录中创建指向文件系统中其他文件的硬链接(hard link)。他们现在返回以下错误:

ln: creating hard link `/var/www/html/1/application' to `/home/conf/application': Invalid cross-device link

我尝试使用符号链接(symbolic link),它有效。但是,此处选择硬链接(hard link)的原因是在删除该文件的所有链接后删除该文件。

有没有办法在 Docker 卷之间创建硬链接(hard link)?

最佳答案

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

问题是 Linux 禁止跨不同文件系统的硬链接(hard link)。在你的情况下,/home/conf/application属于容器的根文件系统,挂载于 / (它可能是 overlay 挂载,或 aufs ,或其他),而卷( /var/www/html/ 以及此目录下的所有内容)属于另一个文件系统,该文件系统位于主机的 /var/lib/docker 下目录(或您的卷位于主机上的任何位置)。

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

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

关于docker - 如何在 Docker 卷中创建指向文件的硬链接(hard link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55380443/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com