Какой пользователь по умолчанию для Docker Exec?
Документация Докера не ясна по этому вопросу, и Google дает мне противоречивые ответы.
Является root
пользователь по умолчанию при звонке docker exec
(без --user
)?
Делает USER
строка в Dockerfile влияет на пользователя по умолчанию для docker exec
?
3 ответа
Пользователь по умолчанию в docker exec - это тот же пользователь, который используется для запуска контейнера, который можно установить при запуске docker или в вашем файле compose.
Если вы не указали явно пользователя при запуске контейнера, он будет по умолчанию настроен на пользователя, настроенного на изображении, вы можете проверить изображение, чтобы найти его. Это настраивается последней строкой USER в Dockerfile. Это также может быть настроено родительским изображением, указанным в строке FROM.
Если ни в образе, ни в команде run не указан пользователь, по умолчанию в Docker используется root, uid 0.
Влияет ли строка USER в Dockerfile на пользователя по умолчанию для docker exec?
Инструкция USER устанавливает имя пользователя (или UID) и, необязательно, группу пользователей (или GID) для использования при запуске образа и для любых инструкций RUN, CMD и ENTRYPOINT, которые следуют за ним в Dockerfile.
Вот пример Dockerfile, который создает пользователя и делает его запускаемым пользователем.
cat Dockerfile
FROM ubuntu:latest
RUN useradd -r sathya
USER sathya
Постройте изображение
docker build -t sathya:user .
Sending build context to Docker daemon 19.46kB
Step 1/3 : FROM ubuntu:latest
---> 113a43faa138
Step 2/3 : RUN useradd -r sathya
---> Running in 5b72508a891d
Removing intermediate container 5b72508a891d
---> b81692196e13
Step 3/3 : USER sathya
---> Running in d43d399a86ac
Removing intermediate container d43d399a86ac
---> c0388a898992
Successfully built c0388a898992
Successfully tagged sathya:user
Запустить контейнер
docker run -it -d sathya:user bash
0903e85fa4de4bb820f015f3ff2bbca9eb2c038814ff7ea809519334687597c7
Exec контейнер. Убедитесь, что запущенный пользователь указан по умолчанию
docker exec -it 0903e85fa4de bash
sathya@0903e85fa4de:/$ whoami
sathya
Когда вы запускаете интерактивный терминал в свой контейнер, вы можете просто запустить
whoami
в Windows или Linux, чтобы получить эффективного пользователя. И да, это будет тот же пользователь, которого вы определили для запуска контейнера в docker run или с USER в файле docker. Я считаю, что по умолчанию пользователем Windows по умолчанию является ContainerAdministrator, а в Linux — root.
Я считаю хорошей практикой безопасности запускать контейнеры с помощью ContainerUser вместо Windows. По сути, это аутентифицированный пользователь с несколькими дополнительными разрешениями, но гораздо меньшими, чем у администратора.