Dockerでコマンド実行結果を変数に入れられなくて困った話



Page content

Dockerfileではコマンド実行結果を変数に入れられない。それでも入れたい時の回避策。


高反発マットレス_モットン
高反発マットレス_モットン

問題

何がやりたかったかというとOracle JDKを入れたかった。

のですが、コマンド実行結果を変数に入れることができない。

RUN set -ex &&\
    URL=$(curl -s http://www.oracle.com/technetwork/java/javase/downloads/index.html | egrep -m1 -o '/technetwork/java/javase/downloads/jdk8-downloads-[0-9]+\.html') && \
    ...

ENVを使ってもできない。

ENV URL_SUFFIX=$(curl -s http://www.oracle.com/technetwork/java/javase/downloads/index.html | egrep -m1 -o '/technetwork/java/javase/downloads/jdk8-downloads-[0-9]+\.html')

回避策

すっきりした解決策は無さそうですが、.bashrcに書けば一応は回避可能のようです。

RUN echo 'export URL="$(curl -s http://www.oracle.com/technetwork/java/javase/downloads/index.html | egrep -m1 -o '/technetwork/java/javase/downloads/jdk8-downloads-[0-9]+\.html')"' >> ~/.bashrc

ちなみに

この回避策は使わず、おとなしくOpenJDKに切り替えました。

RUN set -ex && \
    yum -yq install java-1.8.0-openjdk && \
    yum clean all

参考