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もホームディレクトリも全部解決だ!!

関連する記事はこちら
  • Kustomizeで環境ごとに異なるマニフェストを作る (2019/06/21)
  • Virtual Kubeletとは何か。Alibaba Cloud上で実際に動かして検証する (2019/02/03)
  • Docker Compose上でのRailsアプリケーションの開発フロー (2018/05/02)
  • Docker上でMySQLを利用する際のセットアップについて (2018/04/21)
  • comments powered by Disqus
    このエントリーをはてなブックマークに追加