Dockerコンテナでbashコマンド実行時に発生する「exec: \"bash\": executable file not found in $PATH\": unknown」エラーの原因と解決方法
コンテナプロセス開始時に発生する "exec: "bash": executable file not found in $PATH": unknown" エラーの解説
このエラーは、コンテナ内で bash
コマンドを実行しようとした際に、実行ファイルが見つからない場合に発生します。原因としては、以下の2点が考えられます。
- Dockerイメージに bash がインストールされていない
- bash コマンドのパスが正しく設定されていない
解決方法
多くの公式イメージには bash
がプリインストールされていますが、一部のイメージには含まれていない場合があります。以下のコマンドを実行して、イメージに bash
をインストールできます。
docker run --rm busybox sh -c 'apk add bash'
bash
コマンドのパスが正しく設定されていない場合、以下の方法で設定できます。
- エントリーポイントを設定する
Dockerfile
の ENTRYPOINT
キーワードを使用して、コンテナ起動時に実行されるコマンドを指定できます。以下の例では、コンテナ起動時に /bin/bash
が実行されます。
FROM busybox
ENTRYPOINT ["/bin/bash"]
- 環境変数を設定する
ENV
キーワードを使用して、環境変数を設定できます。以下の例では、PATH
変数に /bin/bash
が追加されます。
FROM busybox
ENV PATH /bin:/usr/bin
補足
- 上記の解決方法以外にも、コンテナイメージ作成時に
bash
をインストールするスクリプトを作成するなど、状況に応じて様々な方法で解決できます。
bash
: コマンドラインインタープリタdocker
: コンテナ化技術mariadb
: オープンソースのデータベース
用語集
- コンテナイメージ: コンテナの実行に必要なファイルと設定をまとめたもの
- エントリーポイント: コンテナ起動時に実行されるコマンド
- 環境変数: コンテナ内で使用できる変数
FROM busybox
ENV PATH /bin:/usr/bin
RUN apk add bash
ENTRYPOINT ["/bin/bash"]
実行例
docker build -t my-image .
docker run -it my-image
上記のコマンドを実行すると、bash
コマンドが実行され、コンテナ内にシェルが立ち上がります。
- 上記のコードは、サンプルです。実際の用途に合わせて変更する必要があります。
その他の解決方法
sh コマンドを使用する
bash
コマンドの代わりに sh
コマンドを使用できます。sh
コマンドは、多くの場合、bash
コマンドよりも軽量で、多くのイメージにプリインストールされています。
docker exec -it <container_id> sh
他のシェルを使用する
bash
コマンドの代わりに、zsh
や fish
などの他のシェルを使用できます。これらのシェルは、bash
コマンドよりも多くの機能を備えている場合があります。
docker exec -it <container_id> zsh
docker exec コマンドのオプションを使用する
docker exec
コマンドには、コンテナ内で実行するコマンドを指定するオプションがあります。以下のオプションを使用して、bash
コマンドを実行できます。
docker exec -it <container_id> /bin/bash
スクリプトを作成する
コンテナ内で実行するコマンドを記述したスクリプトを作成し、そのスクリプトを実行できます。
# script.sh
#!/bin/bash
echo "Hello, world!"
docker exec -it <container_id> sh script.sh
独自のコンテナイメージを作成する
bash
コマンドがインストールされている独自のコンテナイメージを作成できます。
FROM busybox
RUN apk add bash
CMD ["/bin/bash"]
bash docker mariadb