できない.dev

docker exec で「executable file not found in $PATH」が出て実行できない

指定コマンドがコンテナ内に無い/PATH に無いと出る。
slim 系に bash が無いのが典型。
sh を使うか、必要なコマンドをイメージへ入れる。

公開: 更新:

症状できない · exit 127
docker exec exec-demo bash -c 'cat /etc/os-release | head -1'
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH
解決後できた · exit 0
docker exec exec-demo bash -c 'echo hi from bash'
hi from bash

2026-09-02 に local host (Windows 11 Home, Docker 29.1.3)(Node.js 22.14.0 / npm 10.9.2) で実際に打って取った出力。検証環境の詳細

要約

OCI runtime exec failed: ... executable file not found in $PATH は、docker exec で指定したコマンドが、コンテナ内に存在しないか PATH から見つからないときに出る。

最も多いのは alpine や -slim イメージに bash が無いケース。sh に変えるか、必要なコマンドをイメージへインストールすれば解決する。

実行例

alpine ベースのコンテナに bash は入っていないため、docker exec で bash を指定すると executable file not found in $PATH が返り、終了コードは 127 になる。
すでにある sh に変えるか、apk add bash で入れてから呼び直せば、同じ docker exec が終了コード 0 で通る。

$ docker run -d --name exec-demo alpine:3 sleep 120
5cbc58eddf815f004d54c7f543a5d934dc74592357079a0ae9ab8f51d9aa4e53
$ docker exec exec-demo bash -c 'cat /etc/os-release | head -1'
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH
$ echo $?
127
$ docker exec exec-demo sh -c 'cat /etc/os-release | head -1'
$ echo $?
0
$ docker exec exec-demo apk add --no-cache bash
(1/4) Installing ncurses-terminfo-base (6.6_p20260516-r0)
(2/4) Installing libncursesw (6.6_p20260516-r0)
(3/4) Installing readline (8.3.3-r1)
(4/4) Installing bash (5.3.9-r1)
  Executing bash-5.3.9-r1.post-install
Executing busybox-1.37.0-r31.trigger
OK: 10.0 MiB in 20 packages
$ docker exec exec-demo bash -c 'echo hi from bash'
hi from bash
$ echo $?
0

— 2026-09-02 時点の出力

検証環境Node.js 22.14.0 / npm 10.9.2 / Git 2.48.1.windows.1 / 2026-09-02 検証(ほか 1 件)
検証日
実行環境
local host (Windows 11 Home, Docker 29.1.3)
バージョン
  • Node.js 22.14.0
  • npm 10.9.2
  • Git 2.48.1.windows.1
  • Docker 29.1.3

この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。

解決策

1. sh を使う

docker exec -it web sh

bash が無いイメージでも sh(BusyBox の ash や dash)はたいてい使える。
まず sh で入れるか試す。

2. 必要なコマンドを入れる

# Alpine の場合
RUN apk add --no-cache bash
 
# Debian / Ubuntu 系の場合
RUN apt-get update && apt-get install -y --no-install-recommends bash \
  && rm -rf /var/lib/apt/lists/*

恒常的に使うなら Dockerfile でインストールし、イメージに含める。

3. スクリプトの権限と配置を直す

COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

自作スクリプトは実行権限を付け、/usr/local/bin など PATH の通る場所へ置く。
フルパス(/usr/local/bin/entrypoint.sh)で指定するのも確実。

よくある原因

  1. bash が無い: 軽量イメージ(alpine / distroless / -slim)は bash を含まないことが多い。
  2. コマンド未インストール: curl や vim などをイメージに入れていない。
  3. 権限・配置: 自作スクリプトに実行権限が無い、または PATH の通らない場所にある。

この手順で直った?