Мы пытаемся использовать контейнеры docker, чтобы сделать наши сборки программного обеспечения повторяемыми в базовой среде. Один из инструментов в наборе инструментов сборки (Wind River) называется mkromfs, он захватывает файлы в определенной папке, преобразует их в файловую систему, которая затем загружается в ROM на платформе targert (которая является встроенным устройством, но это не важно). Вот). Проблема заключается в том, что эта утилита использует порядок файлов в файловой системе и дает разные результаты, когда я запускаю контейнер на Linux RHEL host, и разные результаты, когда я запускаю его на Linux VM (Docker для Windows с * 1031). * поддержка контейнеров включена, я не знаю, что внутри Linux дистрибутива ...). По сути, то же самое можно быстро воспроизвести, сгенерировав папку с файлами a и b , а затем выполнив ls -f для папки, разные хосты дают файлы в разных порядок (хотя результаты кажутся повторяемыми для этих указанных c хостов).
Контейнер, который мы используем, основан на последней версии Ubuntu, но та же проблема возникла, если я попробую другие базовые образы, похоже, что она полагается на хост-система, а не контейнер (я предполагаю, что она как-то использует файловую систему хоста, но я думал, что докеры используют union FS).
Теперь, конечно, я не хочу рисковать, что кто-то попытается повторить сборку на немного другом хосте Linux в будущем и приведет к другому результату. Я также понимаю, что порядок ls -f (или readdir () внутри) определяется ОС и файловой системой. Я также не могу изменить утилиту mkromfs, так как нет доступного ей источника.
Мои попытки и идеи были таковы:
- У меня есть папка в контейнере с предсказуемой файловой системой (по крайней мере, та же самая), поэтому я хотел смонтировать что-то вроде ramfs или tmpfs, к сожалению, это, похоже, не разрешено в контейнерах (дает разрешение запрещено)
- Взломать наш контент romfs, чтобы сделать его одним файлом, чтобы упорядочение не имело значения (мне это не нравится, потому что это означает Модификация нашего конечного продукта из-за технологии интеграции, это последнее средство для меня ...)
- Переключитесь на виртуальные машины для повторяемости. (Я абсолютно хочу этого избежать, контейнеры намного меньше и быстрее ...)
- Добавить требования для файловой системы, используемой для docker изображений, машина RHEL, которую мы используем, имеет ее в файловой системе ext3, у меня нет попробовал еще, а также я не уверен, может ли это помочь, плюс я до сих пор не знаю, какую файловую систему делают Linux Хосты виртуальных машин в Windows Докеры используют или как это выяснить ...
Есть ли способ сохранить контейнерный подход docker и повторить этот процесс? В идеале не было бы никакой разницы в выполнении сборки в контейнере на удаленном Linux хосте, как на моей Windows 10 машине, работающей Docker с поддержкой Linux. Я новичок во всей docker технологии контейнеров и частично также Linux, я, должно быть, что-то упустил ...