Все команды, запускающие оболочки в контейнерах (включая, например, 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