2017-10-19 14 views
2

イメージ定義で設定した環境変数が設定されていないコンテナを作成しているDockerに問題があります。Dockerで環境変数を設定する

OpenSuse 42.3のイメージを生成するDockerfileを作成しました。私はイメージからいくつかの環境変数を設定する必要がありますので、イメージからコンテナを始める人は、私がコンパイルしてイメージに配置したコードを使用できます。

"image_env_setup.sh"というシェルファイルを作成しました。このファイルには、必要な環境変数定義が含まれています。また、これらの環境変数の定義をDockerfileに手動で追加しました。

USER codeUser 
COPY ./docker/image_env_setup.sh /opt/MyCode 

ENV PATH="$PATH":"/opt/MyCode/bin:/usr/lib64/mpi/gcc/openmpi/bin" 
ENV LD_LIBRARY_PATH="/usr/lib64:/opt/MyCode/lib:" 
ENV PS1="[\[email protected]: \w]\$ " 
ENV TERM="xterm-256color" 
ENV GREP_OPTIONS="--color=auto" 
ENV EDITOR=/usr/bin/vim 

USER root 
RUN chmod +x /opt/MyCode/image_env_setup.sh 
USER codeUser 
RUN /opt/MyCode/image_env_setup.sh 
RUN /bin/bash -c "source /opt/MyCode/image_env_setup.sh" 

私はコンテナを作成するために使用するコマンドは、次のとおりです。

docker run -it -d --name ${containerName} -u $userID:$groupID   \ 
      -e USER=$USER --workdir="/home/codeUser"   \ 
      --volume="${home}:/home/codeUser" ${imageName} /bin/bash \ 

働く唯一のことは、コンテナの起動時に再実行されるシェルファイルを渡すことです。

docker start $MyImageTag 
docker exec -it $MyImageTag /bin/bash --rcfile /opt/MyCode/image_env_setup.sh 

私はそれに任意のエントリが既に定義され、それらをユーザに提供するようにするのが難しいだけで、容器内にシェル変数を設定していることだろうとは思いませんでした。そのたびに、あなたは

+1

は 'alias'は、シェルコマンドで行います。 'ENV'が変更する環境とは何の関係もありません。 – chepner

+0

ありがとう@チェック者。私はそれを編集した。私の最も重要な部分は、PATHとLD_LIBRARY_PATH環境変数を適切に設定することです。他のものは、コンテナに入るときにユーザが見るディスプレイに関するちょうど審美的なものです。私は参照してください – wandadars

答えて

2

RUNエントリは(私はあなたがしたいと仮定し、環境変数を変更することはできませんENVのを設定しているコンテナに入るよう

+0

。 image_env_setup.shファイルで設定されているほとんどの変数は、Dockerfileの例にあります。 .bashrcからimage_env_setup.shを入手する方法を教えてください。これはどこで起こりますか(Dockerfile、ドッカー実行コマンドなど)? – wandadars

+1

私の編集を参照してください。@wandadars – AnoE

+0

@AnoEが表示されますが、>> .bashrcコマンドで暗黙のディレクトリは何ですか?それは、私がそこにいるディレクトリが.bashrcファイルであると仮定しているように見えます。それは通常 "/ home/codeUser"ディレクトリにありますか? ホストのホームディレクトリをコンテナのホームディレクトリにマウントしています。つまり、.bashrcファイルはホスト上のファイルです。私は実際にホストのホームディレクトリをコンテナの家のサブディレクトリにマウントする必要がありますか? – wandadars

0

あなたは〜/ .bash_profileの中/opt/MyCode/image_env_setup.shを置くことができるか、コンテナの〜/ .bashrcにimage_env_setup.shにもっと変数を設定してください)。 Dockerfile内のENVエントリ(および--rcfileなどのドッカーオプションは環境を変更できます)。

もちろんからimage_env_setup.shを取得することもできます。

たとえば、あなたはどちらか.bashrcを事前に製作でき、COPYでそれを引っ張ったり、

RUN echo '. /opt/MyCode/image_env_setup.sh' >> ~/.bashrc