Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

以上

tetrar124
機械学習、ケモインフォマティクスの研究者
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away