DockerfileでPATHを通す時はRUNではなくENVを使おう

  • 30
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

ある時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が使えるようになりました。

地味にハマるとこがあるのでどんどんハマって知見を貯めていきたいですね、以上です。