動作中の docker container 内で shell とかを起動する
何かちょっとファイルを編集したいとか、なんかそういう場合で。
docker は linux の namespace 機能を使って container を隔離しているので、 その辺どうにかしてやれば container 内で shell なりなんなりを動かせる。
unil-linux>=2.23 には nsenter
というその辺どうにかしてくれるツールが入っているので、それを使う。 nsenter
に必要な対象の PID は、 docker inspect
で取得する。
$ nsenter -t $(docker inspect $CONTAINER_ID | jq ".[].State.Pid") -m -u -i -n -p -- /bin/bash
一応注意点として、 docker は普通に使ってれば色々 capability を落としてプロセスを起動してくれているけど、 この手順ではそこまでやっていないので、 docker 内の他のプロセスより一回り強い権限を持つことになる。 container が信頼できないような場合にはやらないほうがいいかも。