Edited at

Dockerfileで、あえてsourceコマンドで環境変数を設定


はじめに

Dockerfileで環境変数を設定するときはENVを使う

Dockerfile Reference

ENV PATH $PATH:/path/to/bin

でも、なんかうまくいかなかったから他の方法でやってみたのでメモ

※ これから書く方法を使用しなくても、以下コマンドでPathを通せるとコメントいただきました。

. ~/.bashrc



環境


  • Windows 10 Pro

  • Docker for Windows


SourceでPathを通す

Dockerfileのビルドはbashではなくshで実行されるため、sourceコマンドを使おうとすると

source : not found

というエラーが出る。

shをbashへのシンボリックリンクで置き換えて、Dockerfileの終了時に元に戻すことで対応する。


例(pyenvへのpathを通して、pyenv経由でanacondaインストール)

RUN mv /bin/sh /bin/sh_tmp && ln -s /bin/bash /bin/sh

#pathを通す
RUN echo 'PATH="$PATH:/path/to/pyenv"' >> ~/.bashrc
#pathを読み込んで処理
RUN source ~/.bashrc && \
pyenv install anaconda3-5.0.1

RUN rm /bin/sh && mv /bin/sh_tmp /bin/sh

参考:https://stackoverflow.com/questions/20635472/using-the-run-instruction-in-a-dockerfile-with-source-does-not-work