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のコンテナ内部でどのユーザーがどの番号で存在してるかわからないですね。
たとえば、psql を postgresql で起動するとする。
# 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
表記ゆれ更新