Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした