ある時Dockerfile内でPATHを通したいと思い、テストコンテナで以下のコマンドを実行して正しい環境になっていることを確認していました。
やりたかったことはCentOS6.7にopenjdk1.8をインストールしている環境にScala-2.11.7をインストールするということです。
OpenJDK1.8が入っているコンテナに手動でScalaをインストール
wget http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz
tar xvzf scala-2.11.7.tgz
mkdir /usr/local/scala
mv scala-2.11.7 /usr/local/scala
export PATH=$PATH:/usr/local/scala/scala-2.11.7/bin
これを実行した後に
which scala
や
scala
を実行してもちゃんと起動することが確認出来ました。
buildに失敗したDockerfile
FROM takashioshikawa/java8
WORKDIR /tmp
RUN wget http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz
RUN tar xvzf scala-2.11.7.tgz
RUN mkdir /usr/local/scala
RUN mv scala-2.11.7 /usr/local/scala
RUN export PATH=$PATH:/usr/local/scala/scala-2.11.7/bin
RUN echo $PATH
RUN which scala
CMD /bin/bash
このDockerfileを使って
docker build -t takashioshikawa/scala-2.11.7 .
を実行すると
RUN echo $PATH
でexportしたはずのPATHが追加されておらず
which scala
でエラーが帰ってきました。
buildに成功したDockerfile
そこで調べてみると http://stackoverflow.com/questions/27093612/in-a-dockerfile-how-to-update-path-environment-variable http://inokara.hateblo.jp/entry/2013/12/28/121828 DockerfileのPATHはRUNではなくENVで通すことを知りDockerfileを書き換えました。FROM takashioshikawa/java8
WORKDIR /tmp
RUN wget http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz
RUN tar xvzf scala-2.11.7.tgz
RUN mkdir /usr/local/scala
RUN mv scala-2.11.7 /usr/local/scala
ENV PATH $PATH:/usr/local/scala/scala-2.11.7/bin
RUN echo $PATH
RUN which scala
CMD /bin/bash
RUN export PATH=$PATH:/usr/local/scala/scala-2.11.7/bin
を
ENV PATH $PATH:/usr/local/scala/scala-2.11.7/bin
に変更しただけです。
これでビルドが通るようになり
docker --rm -it --name testscala takashioshikawa/scala-2.11.7
でコンテナを立ち上げてwhichしてみるとちゃんとScalaが使えるようになりました。
地味にハマるとこがあるのでどんどんハマって知見を貯めていきたいですね、以上です。