結論
ずっと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"]
と書けば変更することができる。