Goldstine研究所

mosuke5's tech blog

ブログ移転しました。5秒後にリダイレクトします。

dockerで特定ユーザでログインした状態のシェル環境を提供する

dockerの一般的な利用の仕方ではあまり想定されないケースかもしれないが、
特定のユーザでログインした状態のコンテナを作りたいという場面に遭遇した。

<やりたいこと>

  • 特定のユーザでログインした状態のシェルを提供すること
  • その際、ユーザの.bash_profile(あるいあは.bashrc)を読み込んだ状態であること
    • .bash_profileに記載したPATHやaliasを使いたい
    • ユーザのログインシェルを利用したい(カスタマイズされたシェルとか)

docker runに-uオプションがあるし、これで余裕!と思った。

[host] $ sudo docker run -u=user_name -i -t image_name /bin/bash

しかし…以下を確認してみると…

[docker] $ pwd
[docker] $ echo $PATH
[docker] $ alias

ディレクトリは "/" だし、PATHも通ってない。
どうやら.bash_profileなどは読んでいないようだ。普通にログインした状態とは違う。

dockerで-uでユーザを指定し場合、指定したuserでコマンドを実行するが、
サーバにユーザでログインしてからコマンドを実行するわけではないらしい。

ディレクトリはどうやら-wオプションで解決できるようだが…

[host] $ sudo docker run -u=user_name -w /home/user_name -i -t image_name /bin/bash
[docker] $ pwd
/home/user_name

ディレクトリはおっけーだが、
当然ながら依然として.bash_profileはダメ。

そこでふと思いついた。-uも-wもいらない。
あの手があるではないか…!!

[host] $ sudo docker run -i -t image_name su - username

suでスイッチユーザすれば.bash_profileもホームディレクトリも全部解決だ!!