/etc/passwd
, /etc/group
. /etc/shadow
でユーザとグループを管理している場合の話。
忘れそうだったのでメモ。
今回、JupyterHub の構築をしていて、docker イメージ使うと簡単そうだったので利用したのだけど、ホストのユーザが JupyterHub を使えるようにしたかったので、いろいろ試行錯誤した。
結論としては以下のようにするのがよさそう。
- ユーザ管理(追加、削除など)はホスト側で行う
- Docker コンテナはホストの
/etc/{passwd,group,shadow}
を Read-Only で参照
→docker run -v src:dst:ro
を使う - ユーザ管理コマンドで
/etc/{passwd,group,shadow}
の i-node が変わっても良いようにする
→ ディレクトリ単位でバインドする、ただし、Docker コンテナの /etc をホストの /etc で上書きしてしまうのは困るので、どちらの内容が見えるかはファイルごとに制御したい
そのために、
/import/etc/
を作成する- イメージにもともとある
/etc/{passwd,group,shadow}
を/import/etc/
に移動する cd /etc; ln -s /import/etc/{passwd,group,shadow}
してシンボリックリンクするdocker run -v /etc:/import/etc:ro -v /home:/home
としてディレクトリごとマウントする
多分、これでOK。