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

記事の内容に関連した相談、仕事依頼したい New

記事の内容やクラウドネイティブ技術に関する相談、仕事依頼を開始しました。
仕事依頼、相談をしてみる

フィードバック

本記事に対して、フィードバックあればこちらのフォームからご記入ください。
記事の内容にフィードバックしてみる

このエントリーをはてなブックマークに追加