Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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容器在不同的linux主机上提供不同的ls-f(readdir)结果_Docker_Filesystems_Containers_Repeat - Fatal编程技术网

Docker容器在不同的linux主机上提供不同的ls-f(readdir)结果

Docker容器在不同的linux主机上提供不同的ls-f(readdir)结果,docker,filesystems,containers,repeat,Docker,Filesystems,Containers,Repeat,我们正试图使用docker容器使我们的软件构建在基线环境中可重复。构建工具链(Wind River)中的一个工具称为mkromfs,它获取特定文件夹中的文件,将其转换为文件系统,然后将其加载到targert平台上的rom(这是一个嵌入式设备,但在这里并不重要)。问题是:该实用程序依赖于文件系统顺序,在Linux RHEL主机上运行容器时会给出不同的结果,在Linux VM上运行时会给出不同的结果(Docker for Windows,启用了Linux容器支持,我不知道Linux发行版在里面…)。

我们正试图使用docker容器使我们的软件构建在基线环境中可重复。构建工具链(Wind River)中的一个工具称为mkromfs,它获取特定文件夹中的文件,将其转换为文件系统,然后将其加载到targert平台上的rom(这是一个嵌入式设备,但在这里并不重要)。问题是:该实用程序依赖于文件系统顺序,在Linux RHEL主机上运行容器时会给出不同的结果,在Linux VM上运行时会给出不同的结果(Docker for Windows,启用了Linux容器支持,我不知道Linux发行版在里面…)。基本上,通过生成包含文件ab的文件夹,然后对文件夹执行ls-f,可以快速复制相同的文件。不同的主机以不同的顺序提供文件(尽管结果似乎可以在特定的主机上重复)

我们使用的容器基于ubuntu最新版本,但如果我尝试另一个基本映像,也会出现同样的问题,它似乎依赖于主机系统,而不是容器(我猜它实际上以某种方式使用主机文件系统,但我认为dockers使用union FS)

现在,我当然不想冒险,将来有人会尝试在稍微不同的Linux主机上重复构建,结果会有所不同。我还知道ls-f(内部称为readdir())的顺序是由OS和文件系统给出的。我也不能更改mkromfs实用程序,因为它没有可用的源代码

到目前为止,我的尝试和想法是:

  • 容器中有一个文件夹,其中包含可预测的文件系统(至少是同一个文件系统),所以我想挂载类似于ramfs或tmpfs的东西,不幸的是,容器中似乎不允许这样做(拒绝授予权限)
  • 对我们的romfs内容进行黑客攻击,使其成为一个单独的文件,这样订购就不重要了(我不喜欢这样,因为这意味着由于集成技术而修改我们的最终产品,这是我最后的选择…)
  • 切换到虚拟机以实现重复性。(我绝对希望避免这种情况,因为容器更小更快……)
  • 添加用于docker映像的文件系统的要求,我们使用的RHEL机器在ext3文件系统上有它,我还没有尝试过,而且我也不确定这是否有帮助,而且我仍然不知道Windows docker中的Linux VM主机使用什么文件系统,或者如何解决这个问题

是否有某种方法可以保存docker容器方法并使此过程可重复?理想情况下,远程Linux主机上的内置运行容器与运行Docker和Linux支持的Windows 10机器上的内置运行容器没有区别。我不熟悉整个docker容器技术,部分也不熟悉Linux,我肯定错过了一些东西…

我找到了一个适合我的案例的解决方案,以防将来有人需要它:

docker run -t -d --mount type=tmpfs,destination=/build myimage
这样,容器中的/build目录在所有机器上使用相同的文件系统(至少到目前为止看起来是这样)。更多关于这方面的信息,请访问


有了这个变化,ls-f和实用程序都提供了相同的结果

我找到了一个适合我的案例的解决方案,在这里,它是为了防止将来有人需要它:

docker run -t -d --mount type=tmpfs,destination=/build myimage
这样,容器中的/build目录在所有机器上使用相同的文件系统(至少到目前为止看起来是这样)。更多关于这方面的信息,请访问

有了这个变化,ls-f和实用程序都提供了相同的结果