LoginSignup
9
4

More than 3 years have passed since last update.

コンテナへのsshログイン時に環境変数を反映させる方法(Docker, kubernets)

Last updated at Posted at 2019-06-08

Dockerでsshログインする際に環境変数が反映されない課題の解決法。sshを使用するコンテナは機械学習の環境構築用を想定。
(pythonとpycharmnでsshログインして使用、など)

1.背景と課題

一般にDockerfileで環境変数を使う際は、ENVを使う。

#ENV 環境変数名 パス
ENV SPARK_HOME /usr/local/spark

しかし、Dockerやkubernetsへsshでログインすると、この記法ではPATHなど一部の環境変数が反映されない課題がある。

名前が被らない環境変数は/etc/environmentに記入することで対応可能。

RUN echo "export SPARK_HOME=/usr/local/spark"  >> /etc/environment

しかし、PATHなど元々存在する環境変数にはこの方法が通用しない。

対策として~/.ssh/environment を使う方法が散見されるが、この方法はsshコマンド実行直後にしか環境変数は反映されない。

2.原因

PATHなどの環境変数が反映されない問題はssh経由のBash起動時に.bashrcを読み込まない事が原因である。

3.対策

.bash_profileにを作成して.bashrcを読み込ませて対策を行う。

#.bash_profileを作成し、.bashrcを読み込む(シェルスクリプト)
RUN echo "if [ -f ~/.bashrc ]; then  . ~/.bashrc;  fi" >>~/.bash_profile
# 環境変数の書き込み(PATHへ/usr/local/spark/binの追加)
RUN echo "PATH=${PATH}:/usr/local/spark/bin" >> ~/.bashrc

rootユーザー以外の場合は出力先を下記に書き換える

 /home/ユーザー名/.bash_profile
 /home/ユーザー名/.bashrc

以上

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4