Запустить Docker контейнер от пользователя в Unix/Linux

Thank you for reading this post, don't forget to subscribe!

Кон­тей­нер, запус­ка­ет­ся все­гда от поль­зо­ва­те­ля root, но быва­ет так, что в Dockerfile про­пи­сы­ва­ют юзе­ра для рабо­ты внут­ри кон­тей­не­ра. И тогда, когда попы­тать­ся исполь­зо­вать дру­го­го юзе­ра, выдаст ввод паро­ля, кото­рый воз­мож­но не зна­е­те, например:

$ docker exec -ti jenkins /bin/bash jenkins@6350b7b8729c:/$ su -
Password:

Как вид­но с коман­ды выше, я запу­стил джен­кинс. У кон­тей­не­ра име­ет­ся поль­зо­ва­тель (тоже джен­кинс), но я не знаю от него пароль. Реше­ние — это исполь­зо­вать пара­метр кото­рый выста­вит нуж­но­го юзе­ра при стар­те контейнера:

$ docker exec -it -u your_container_user your_conatainer container_command
Или:
$ docker exec -it --user your_container_user your_conatainer container_command
При­ве­ду при­мер с дженкинсом:
$ docker exec -it -u root jenkins /bin/bash

При дан­ной коман­де, я под­клю­чусь к кон­тей­не­ру как root-юзер.

Да, но если есть необ­хо­ди­мость запу­стить сам кон­тей­нер от дру­го­го поль­зо­ва­те­ля, то сто­ит использовать:

$ sudo -u your_user "docker run -d --name jenkins --hostname jenkins.local -p 8080:8080 -p 50000:50000 --restart always -v /usr/local/jenkins/data_2:/var/jenkins_home --dns=10.17.0.3 --dns=10.17.0.4 --dns=1.1.1.1 --dns=74.82.42.42 --add-host=gitlab_local_docker:172.168.0.66 jenkins/jenkins:latest"

Или, сна­ча­ла пере­клю­чит­ся в поль­зо­ва­те­ля и запу­стить от него докер:
$ su YOUR_USER

И потом, мож­но вот так:
docker run -d \ --name jenkins \ --hostname jenkins.local \ -p 8080:8080 -p 50000:50000 \ --restart always \ -v /usr/local/jenkins/data_2:/var/jenkins_home \ --dns=10.17.0.3 \ --dns=10.17.0.4 \ --dns=1.1.1.1 \ --dns=74.82.42.42 \ --add-host=gitlab_local_docker:172.168.0.66 \ jenkins/jenkins:latest