LoginSignup
147
109

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-01

ある時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


そこで調べてみると


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

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

147
109
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
147
109