71
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerfileでビルド時にbashを使う

Last updated at Posted at 2018-10-08

結論

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

71
54
0

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
71
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?