Any interest in Podman?

Я попробовал заняться этим около получаса. Podman совместим с командами, но не с выводом, поэтому launcher путается, пытаясь разобрать вывод. (Различить их несложно: docker --version отвечает podman version 1.0.5, так что это не серьёзное препятствие.)

Устройства сети docker0 нет. Драйвер хранения overlay по умолчанию в Podman по сути является реализацией overlay2 и имеет псевдоним на него, но вывод не содержит слова overlay2, а вывод команды docker info немного отличается. Я использовал флаг --skip-prereqs, чтобы обойти проверки. Общие каталоги не были созданы автоматически; я не стал разбираться, почему. Я выполнил mkdir -p /var/discourse/shared/standalone/log/var-log, чтобы продолжить. Далее я столкнулся с проблемами прав доступа из-за того, что SELinux был включён в режиме принуждения, но не настроен для /var/discourse.

Если вы монтируете каталог в контейнер как том и добавляете :z или :Z, движки контейнеров переименовывают содержимое под томами в container_file_t.

В документации по сборке Podman сказано:

Опция z указывает Podman, что два контейнера разделяют содержимое тома. В результате Podman помечает содержимое общим меткой. Общие метки тома позволяют всем контейнерам читать и записывать содержимое. Опция Z указывает Podman пометить содержимое приватной немаркированной меткой. Только текущий контейнер может использовать приватный том.

Я решил временно выполнить setenforce 0 для этой тестовой установки и вернуться к этому позже, возможно. Я изменил volumes, чтобы использовать строчную :z следующим образом:

volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared:z
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log:z

С этими небольшими изменениями мне удалось запустить загрузку Discourse. Redis недоволен тем, что в ядре поддерживаются прозрачные большие страницы, и предлагает отключить это, а также изменить настройки перераспределения памяти. Вероятно, мимо меня пролетело множество других полезных сообщений отладки в мегабайтах вывода журнала!

./launcher start app
...
--restart option is not supported.
Use systemd unit files for restarting containers

Я модифицировал скрипт, чтобы не использовать --restart, и обнаружил необходимость в --skip-prereqs также в режиме start, что в итоге привело меня к попытке выполнить docker run, после чего:

./launcher start app --skip-prereqs
...
+ /usr/bin/docker run ... -e DOCKER_HOST_IP= --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared:z -v /var/discourse/shared/standalone/log/var-log:/var/log:z --mac-address 02:9c:01:9b:0e:17 local_discourse/app /sbin/boot
--mac-address option not currently supported

Так что определённо это не работает из коробки, и я не знаю, сколько усилий потребуется, чтобы доработать launcher для работы с Docker или Podman. Обработка предварительных требований была бы «работой из коробки» и, вероятно, не слишком сложной при предварительной проверке на наличие Podman, но я не знаю, насколько глубоко предположения о настройке сети проникают в конфигурацию нижних уровней, и похоже, что этот режим сети просто не поддерживается Podman.

Исходя из этого опасения, я планирую не тратить усилия на то, чтобы заставить launcher работать под Podman. Я просто сообщаю результаты первоначального быстрого эксперимента.

Тем не менее, для кого-то, кто лучше знает стек, это, вероятно, не составит большого труда. Весной этого года я проводил всю свою разработку в рамках ручной установки разработки на Fedora 29 с тривиальными корректировками, такими как использование dnf вместо apt-get и некоторыми незначительными переводами названий пакетов, вообще не используя Docker или Podman. Я предполагаю, что кто-то, кто хорошо знает Podman, а также обычное администрирование всего технологического стека Discourse, вероятно, посчитает это умеренным объёмом относительно лёгкой работы. Если бы я знал, что именно нужно сделать, то лучше понимал бы, будет ли это работа, которая, скорее всего, «устареет» и потребует постоянного обслуживания, или нет. Но… я не знаю. :roll_eyes: