gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:52:28 27 4
gpt4 key购买 nike

我们正在尝试使用docker容器来使我们的软件构建在基准环境中可重复。构建工具链中的一种工具(Wind River)称为mkromfs,它可以抓取某些文件夹中的文件,将它们转换为文件系统,然后可以在targert平台(这是嵌入式设备)上加载到rom中,但这并不重要。这里)。问题是:该实用程序依赖于文件的文件系统顺序,并且在Linux RHEL主机上运行容器时会产生不同的结果,而在Linux VM中运行容器时会产生不同的结果(启用Linux容器支持的Windows Docker,我不知道里面有Linux发行版...)。基本上,可以通过生成包含文件 a b 的文件夹,然后在该文件夹上执行 ls -f 来快速重现相同的内容,不同的主机以不同的顺序提供文件(尽管结果在该特定文件上看起来可重复)主机)。

我们使用的容器基于最新的ubuntu,但如果我尝试其他基本镜像,也会发生相同的问题,它似乎依赖于主机系统,而不是容器(我猜它实际上以某种方式使用了主机文件系统,但是我认为dockers使用Union FS)。

现在,我当然不想冒险,将来有人会尝试在稍有不同的Linux主机上重复构建,而结果会有所不同。我也理解ls -f的顺序(或内部的readdir())由操作系统和文件系统给出。我也不能更改mkromfs实用程序,因为没有可用的源。

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

  • 容器中有一个可预测文件系统的文件夹(至少同一个文件夹),因此我想挂载ramfs或tmpfs之类的文件,不幸的是,容器中似乎不允许这样做(拒绝权限)
  • 破解我们的romfs内容以使其成为单个文件,这样订购就无关紧要了(我不喜欢这样做,因为这意味着由于集成技术而修改了我们的最终产品,这对我来说是不得已的方法...)
  • 切换到虚拟机以提高可重复性。 (我绝对想避免这种情况,容器要小得多且速度更快...)
  • 添加用于docker镜像的文件系统的需求,我们使用的RHEL机器在ext3文件系统上有它,我还没有尝试过,而且我不确定这是否有帮助,再加上我仍然不知道Linux使用什么文件系统Windows Dockers中的VM主机使用或如何弄清楚...

  • 有什么方法可以保存docker容器方法并使此过程可重复吗?理想情况下,在远程Linux主机上的容器中运行的构建与在运行支持Linux的Docker的Windows 10计算机上的运行没有区别。我是整个Docker容器技术的新手,部分是Linux的新手,我一定错过了一些东西...

    最佳答案

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

    docker run -t -d --mount type=tmpfs,destination=/build myimage

    这样,容器中的/ build目录在所有计算机上都使用相同的文件系统(至少到目前为止看起来是这样)。有关更多信息,请访问 https://docs.docker.com/storage/tmpfs/

    进行此更改后,ls -f和实用程序将提供相同的结果。

    关于docker - Docker容器在不同的Linux主机上提供不同的ls -f(readdir)结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59747471/

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