24 Jan 2015, 21:32

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を読み込んでいるわけではない。

というわけで、docker起動時のコマンドをsuにしてしまうことで解決できることを思いついた。

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

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

関連する記事はこちら
  • Docker上でMySQLを利用する際のセットアップについて (2018/04/21)
  • DockerとWebSocketを使って、vimの設定をブラウザで即体感できるサービスを作った (2015/07/19)
  • SSHポートフォワードを通してhttps接続をするときの注意点 (2015/02/11)
  • Ansible、コマンド実行結果をokにする(冪等性を保つ方法) (2015/02/02)
  • SSHでローカルポートフォワードを実際に試す (2014/12/31)
  • comments powered by Disqus
    このエントリーをはてなブックマークに追加