Запустить команду как root с docker -создать в 2020? - PullRequest
1 голос
/ 23 марта 2020

В процессе кропотливого создания Dockerfile и docker -compose.yml, что ПРАВИЛЬНЫЙ ПУТЬ для запуска root оболочки в незавершенных контейнерах (без фактического запуска их услуги!) для устранения проблем? Мне нужно иметь возможность запускать оболочку как root, потому что только root имеет полный доступ к файлам, содержащим информацию, которую мне нужно проверить.

I может изменить Dockerfile и docker -compose.yml для достижения этой цели; как я уже писал выше, я в любом случае нахожусь в процессе их создания.

Проблема, однако, заключается в том, что единственный способ, которым я могу придумать, это поместить USER root в Dockerfile или user: root в docker - compose.yml, но это SimplyHaveNoEffect ™ в сценарии docker-compose run <service> bash. whoami в запущенной оболочке говорит neo4j вместо root, независимо от того, что я пытаюсь.

I может добавить sudo к изображению, что не имеют sudo, но это следует учитывать в крайнем случае . Также использование docker напрямую вместо docker -compose является менее предпочтительным.

1 Ответ

2 голосов
/ 23 марта 2020

Все команды, запускающие оболочки в контейнерах (включая, например, docker-compose run, имеют параметр --user, поэтому вы можете указать произвольного пользователя для вашей оболочки отладки.

docker-compose run -u root <service> bash

Если вы находитесь в процессе отладки сборки образа, обратите внимание, что на каждом этапе сборки создается образ, и вы можете запустить оболочку отладки для этого образа (например, изучите шаг перед RUN шаг, чтобы посмотреть, как выглядит файловая система, до того, как она выполнится, или после, чтобы увидеть ее результаты.)

$ docker build .
...
Step 7/9 : RUN ...
 ---> Using cache
 ---> 55c91a5dca05
...
$ docker run --rm -it -u root 55c91a5dca05 bash

В обоих этих случаях команда (bash) переопределяет CMD в файле Docker. Если у вас есть сценарий-оболочка ENTRYPOINT, который все еще будет работать, но стандартная команда exec "$@" запустит вашу оболочку отладки. Если вы указали команду по умолчанию для запуска как ENTRYPOINT, измените ее на CMD, чтобы лучше поддержите этот вариант использования (а также шаблон точки входа оболочки, если он вам понадобится).

Если вы действительно не можете изменить Dockerfile, вы также можете переопределить ENTRYPOINT, но это немного неловко.

docker run --rm -it -u root --entrypoint ls myimage -al /app
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...