memo

2014-05-16

動作中の 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 が信頼できないような場合にはやらないほうがいいかも。