Как сделать так, чтобы точка входа в Docker работала без полномочий root только для некоторых конкретных команд - PullRequest
0 голосов
/ 22 октября 2018

Моя точка входа в изображение PHP выглядит примерно так.Точка входа работает как root , и это необходимо в моем случае.Поэтому любая команда, которую я запускаю в своем контейнере, запускается от имени пользователя root.Для какой-то конкретной команды я хочу запустить ее как другой пользователь, например, когда кто-то пытается выполнить docker exec -it php composer install, composer должен запускаться как другой пользователь, установленный в точке входа.когда кто-то пытается выполнить docker exec -it php drush status, drush должен запускаться от имени другого пользователя, установленного в точке входа.Возможно, оператор if или switch внутри точки входа может мне помочь.Я пытался что-то вроде этого https://unix.stackexchange.com/questions/476155/how-to-pass-multiple-parameters-to-su-user-c-command, но передача параметра с двойной чертой (-) нарушает некоторые команды.

Dockerfile

COPY entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]

entrypoint.sh

#!/bin/sh

set -e

# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
    set -- php-fpm "$@"
fi

exec "$@"

1 Ответ

0 голосов
/ 20 ноября 2018

Я не уверен, что понимаю ваш вариант использования, но я использую su-exec , чтобы сбросить привилегии пользователю без полномочий root в моем сценарии точки входа.Чаще всего я должен использовать это, потому что мне нужно изменить разрешения для тома, подключенного к привязке (обычно /var/run/docker.sock).

По существу я буду выполнять операции корневого уровня в моей точке входа, а затем переходить кпользователь root при выполнении службы контейнера.

В этом блоге объясняется концепция использования gosu, su-exec - это рефакторинг gosu в C, который составляет 10 КБ против 1,8 МБ: https://denibertovic.com/posts/handling-permissions-with-docker-volumes/

Обратите внимание на проблемы безопасности , которые AFAIK не учитывают при использовании этого в контейнерах.

...