デフォルトユーザがrootでないコンテナで、sudoコマンドも無い場合にコンテナ内でrootユーザになる方法。
docker composeの-uオプション
docker compose execコマンドに-uオプションをつけるとrootユーザーでコンテナにログインできる。
$ docker compose exec -u root サービス名 sh
実験
実験で使うコンテナイメージ
prom/prometheus
はnobodyユーザーで実行されており、
sudoコマンドも無い。
このイメージを使って実験する。
version: '2'
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
起動とログイン
上記docker-compose.ymlを作成し、docker-composeで起動する。
$ docker compose up -d
...
✔ Network docker-nginx_default
✔ Container docker-nginx-prometheus-1 Started
まずはdocker compose execコマンドでユーザを指定せずにログインしてみる。
ログインユーザはnobodyとなっている。
$ docker compose exec prometheus sh
/prometheus $ id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
sudoコマンドも無い。
/prometheus $ sudo su -
sh: sudo: not found
suコマンドによるrootユーザーへの切り替えも許可されていない。
/prometheus $ su
su: must be suid to work properly
rootユーザーでログイン
-uオプションをつけてrootユーザーでログインする。
$ docker compose exec -u root prometheus sh
/prometheus # id
uid=0(root) gid=0(root) groups=0(root),10(wheel)
sh以外のコマンドもrootで実行できる
sh以外のコマンドも-uオプションをつけてrootユーザーで実行できる。
例えば/rootディレクトリはrootユーザーのホームディレクトリなので、root以外ではアクセスできない。
以下のように-u rootオプションをつけた上で実行すると閲覧が可能となる。
$ docker compose exec -u root prometheus ls -a /root
. .. .ash_history
\第一線のプログラマーの行動原理を学べる!/
