Docker コンテナでホストと同じユーザ・グループを利用する方法

/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。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です