Как определить UID без запуска контейнера?

Я запускаю образ docker.io/library/mariadb:latest с помощью podman на Centos 8. Я монтирую том на хосте для постоянного хранения базы данных. Я понимаю, что владелец каталога на хосте должен быть изменен, чтобы пользователь внутри контейнера получил доступ rw. Поэтому для этой цели мы используем команду podman unshare. Пользователь в mariadb называется mysql. Если мы войдем

      podman unshare chown mysql:mysql /path/to/host

Это приведет к ошибке:

      chown: invalid user: ‘mysql:mysql’

Это имеет смысл, потому что пользователь mysql не существует на хосте. Для этого мы должны предоставить UID. Эта информация обычно получается из работающего контейнера и ищет mysql в / etc / passwd.

       podman run docker.io/library/mariadb grep mysql /etc/passwd

И UID / GID составляет 999:999 из вывода ниже.

      mysql:x:999:999::/home/mysql:/bin/sh

Теперь мы можем chown, используя UID на хосте.

      podman unshare chown 999:999 /path/to/host

И это работает.

Но как мы можем получить эту информацию без запуска контейнера?

Я проверил изображение и не могу найти явный назначенный UID:GID. Причина этого вопроса заключается в том, чтобы реализовать автоматическую инициализацию / настройку инфраструктуры, не беспокоясь о ручных действиях.

1 ответ

Самый простой способ справиться с этой ситуацией - использовать именованный том , а не привязку. Например, если мы бежим ...

      podman run -it --rm -v mariadb_data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=secret  mariadb:latest 

... тогда контейнер запустится без ошибок. Эта форма -v Вариант причины podmanчтобы создать именованный том , а не использовать конкретный существующий каталог хоста, как это было бы при монтировании привязки.

При монтировании именованного тома право собственности на том устанавливается на UID, под которым выполняется основной процесс контейнера, поэтому по умолчанию он имеет правильные разрешения.

Это дает вам почти все преимущества использования привязки монтирования, то есть данные базы данных поддерживаются вне файловой системы контейнера и будут сохраняться, даже если контейнер будет удален - без необходимости возиться с разрешениями.

Другие вопросы по тегам