Как сопоставить разрешения пользователей, определенные в контейнере Docker, которые уже существуют на хосте - PullRequest
0 голосов
/ 01 июня 2018

Я хочу запустить postgres внутри контейнера Docker со смонтированным томом.Я следую шагам, как описано здесь .Однако контейнер никогда не запускается.Я думаю, это потому, что каталог /var/lib/postgresql/data принадлежит пользователю postgres с uid 999 и группе postgres с gid 999.

Насколько я понимаю, мне нужно создать пользователя и группу с одинаковыми uid и gid на моем хосте (имя не имеет значения) и назначить эти разрешения для каталога, который я монтируюна моем хосте.

Проблема в том, что uid и gid уже заняты на моем хосте.Я могу перестроить образ Docker из Dockerfile и изменить значения uid и gid, но я не думаю, что это хорошее долгосрочное решение, так как я хочу использовать официальные изображения postgres из Docker Hub.

Мой вопрос: если контейнер определяет разрешения, которые уже существуют на хосте, как вы сопоставляете разрешение от хоста к контейнеру без необходимости перестраивать сам контейнер с конфигурацией из вашей среды?

Если я неправильно понимаю вещи или не в порядке, как правильно обойти эту проблему?

1 Ответ

0 голосов
/ 13 июня 2018

Вы правы насчет /var/lib/postgresql/data.Когда вы запускаете контейнер, он меняет в контейнере владельца файлов в этом каталоге на пользователя postgres (с идентификатором пользователя 999).Если файлы уже присутствуют на подключенном томе, изменение владельца может завершиться неудачно, если у пользователя, с которым вы запускаете Docker, нет необходимых прав доступа.Здесь есть превосходное объяснение владения файлами в Docker Понимание владения файлами пользователей в Docker .

Мой вопрос: если контейнер определяет разрешения, которые уже существуют на хосте, как вы сопоставляете разрешение от хоста к контейнеру без необходимости перестраивать сам контейнер с конфигурацией из вашей среды?

Я думаю, вы можете искать пространства имен пользователей докера. Введение в пространства имен пользователя в Docker Engine .Это позволяет вам фиксировать разрешения в томах докера.

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

docker run --entrypoint="bash" postgres -c  'usermod -u 2006 postgres;exec /docker-entrypoint.sh postgres'
...