それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

docker exec で root になる。/ docker exec を指定したユーザーで実行する

docker exec しても root になるとは限らない。

dockerのインスタンスによっては、Dockerfile の記述によっては、docker exec がユーザー root で実行できないことがある。

docker exec を強制的に root にする

uid をオプションに付けたら、強制的にrootユーザ で実行することができる。 -u UIDでUIDを指定することができる。

docker exec -u 0 -it XXXXXX bash 

docker exec で user を指定する。

指定したユーザで起動するには。まずUIDを調べる。UIDがわからないと指定できないし、Dockerのコンテナ内部でどのユーザーがどの番号で存在してるかわからないですね。

たとえば、psqlpostgresql で起動するとする。

# docker exec -it 6a7e5eca6505 getent passwd | grep post
postgres:x:999:999::/var/lib/postgresql:/bin/bash

そのUIDで起動する。

docker exec -it -u 999 6a7e5eca6505 psql

こうすれば、postgresユーザーをdocker exec で直接指定できる。 これで別のユーザーに成り代わってシェルを使えたりする。

apt が使えない docker インスタンスとかで使える

通常通り exec しても apt が使えないときとか。sudo が使えないときとか。

ps がないのでインストールしたいときとかに使える。

docker のイメージファイルはあれこれ省略されているので、ちょっとしたトラブルがあると困るのですが、権限がない程度で Dockerfile から書いて build するのはめんどくさすぎるので。ユーザーを指定されているDockerイメージを扱うためには、ちょっとしたコツがいる。

参考資料

https://stackoverflow.com/questions/59376888/become-root-in-a-docker-container

2021-05-27

表記ゆれ更新