Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在docker卷中创建指向文件的硬链接 我正在重构并“剥壳”一个由shell脚本、C++二进制文件和各种开放源码包(其中HTTPD)组成的遗留应用程序。_Docker_Hardlink - Fatal编程技术网

如何在docker卷中创建指向文件的硬链接 我正在重构并“剥壳”一个由shell脚本、C++二进制文件和各种开放源码包(其中HTTPD)组成的遗留应用程序。

如何在docker卷中创建指向文件的硬链接 我正在重构并“剥壳”一个由shell脚本、C++二进制文件和各种开放源码包(其中HTTPD)组成的遗留应用程序。,docker,hardlink,Docker,Hardlink,有没有办法在docker容器中创建指向docker卷中文件的硬链接? 我计划按如下方式设计容器: 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: htt

有没有办法在docker容器中创建指向docker卷中文件的硬链接?

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

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/目录中创建指向文件系统中其他文件的硬链接。 它们现在返回以下错误:

ln: creating hard link `/var/www/html/1/application' to `/home/conf/application': Invalid cross-device link
我尝试使用符号链接,效果很好。然而,这里选择硬链接的原因是在删除所有指向该文件的链接后将其删除


有没有办法创建跨docker卷的硬链接?

没有,没有办法实现您想要的

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

但这还不是全部。为了强制执行“无跨文件系统硬链接”限制,当您尝试创建硬链接时,内核会检查该限制。这意味着,即使源和目标属于相同的文件系统,但也属于不同的装载点,仍禁止创建硬链接

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