45
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Dockerfileでビルド時にbashを使う

結論

ずっとbashを使いたい

Docker 1.12から追加されたSHELLを使う。

SHELL ["/bin/bash", "-c"]

ずっとbashを使いたい(Docker 1.12未満)

/bin/shのシンボリックリンクを張り替える。

RUN rm /bin/sh && ln -s /bin/bash /bin/sh

一時的にbashを使いたい

シェルを直接指定してコマンドを実行する。

RUN ["/bin/bash", "-c", "echo hello"]

Dockerfileでbashを使ういろいろ

Dockerfileのビルド時にsource等を使いたい場合,デフォルトのshellである/bin/shでは使えないため,/bin/bash等を使う必要が出てくる。
ググるとRUN ["/bin/bash", "-c", "echo hello"]などやRUN rm /bin/sh && ln -s /bin/bash /bin/shなどが上位にヒットする。
前者は一時的に/bin/bashで実行できるが全ての命令を/bin/bashで実行したい場合は煩雑である。
後者は/bin/shを削除するため,/bin/shも使いたいときは向かないが,SHELLが使えないDocker 1.12未満でも動くため,Dockerのバージョンが古い場合は便利である。

しかし,よくよく調べるとちゃんと公式ドキュメントに書いてあった。
Docker 1.12から追加されたSHELLを使えばデフォルトのshellを変更できる。
具体的には以下のように書く。

SHELL ["/bin/bash", "-c"]

再びshellを変更したい場合は SHELL ["/bin/sh", "-c"]と書けば変更することができる。

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
45
Help us understand the problem. What are the problem?