MeWrite Docs

standard_init_linux.go: exec user process caused 'no such file or directory'

DockerでENTRYPOINTやCMDの実行ファイルが見つからない場合のエラー

概要

Dockerコンテナ起動時に、DockerfileのENTRYPOINTCMDで指定した実行ファイルが見つからない、または実行できない場合に発生するエラーです。

エラーメッセージ

standard_init_linux.go:211: exec user process caused "no such file or directory"

または

exec /entrypoint.sh: no such file or directory

原因

  1. ファイルが存在しない: COPYやADDでファイルがコピーされていない
  2. 改行コードの問題: Windowsの改行コード(CRLF)がLinuxで認識されない
  3. シェバンの問題: #!/bin/bashのシェルが存在しない
  4. パスの問題: 相対パスや絶対パスの指定ミス
  5. 実行権限がない: ファイルに実行権限が付与されていない

解決策

1. ファイルの存在確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Dockerfile
FROM node:18-alpine

WORKDIR /app

# ファイルをコピー
COPY package*.json ./
COPY src/ ./src/
COPY entrypoint.sh ./

# 実行権限を付与
RUN chmod +x entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]
1
2
3
# ビルド時にファイルがコピーされているか確認
docker build -t myapp .
docker run --rm myapp ls -la

2. 改行コードをLFに変換

1
2
3
4
5
6
7
8
# Linuxの場合
sed -i 's/\r$//' entrypoint.sh

# macOSの場合
sed -i '' 's/\r$//' entrypoint.sh

# または dos2unix
dos2unix entrypoint.sh
1
2
3
# Dockerfile内で変換
COPY entrypoint.sh .
RUN sed -i 's/\r$//' entrypoint.sh && chmod +x entrypoint.sh

3. シェバンを確認・修正

1
2
3
4
5
#!/bin/sh
# /bin/bash は alpine には存在しない場合がある

# または bash をインストール
#!/bin/bash
1
2
3
# alpine で bash が必要な場合
FROM alpine:3.18
RUN apk add --no-cache bash

4. exec形式を使用

1
2
3
4
5
6
7
8
# Bad: シェル形式(シェルに依存)
ENTRYPOINT /app/start.sh

# Good: exec形式(直接実行)
ENTRYPOINT ["/app/start.sh"]

# Good: シェルを明示
ENTRYPOINT ["/bin/sh", "-c", "/app/start.sh"]

5. 絶対パスを使用

1
2
3
4
5
6
7
8
# Bad: 相対パス
ENTRYPOINT ["./start.sh"]

# Good: 絶対パス
WORKDIR /app
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
ENTRYPOINT ["/app/start.sh"]

6. マルチステージビルドの場合

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# ビルドステージ
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm run build

# 実行ステージ
FROM node:18-alpine
WORKDIR /app

# ビルドステージから必要なファイルをコピー
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/entrypoint.sh ./

# 実行権限を付与(ビルドステージからコピー後)
RUN chmod +x entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]

7. デバッグ方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# シェルに入って確認
docker run --rm -it --entrypoint /bin/sh myapp

# ファイルの存在確認
ls -la /app/

# ファイルの内容確認
cat /app/entrypoint.sh

# 改行コード確認
cat -A /app/entrypoint.sh  # CRLF は ^M$ と表示される

よくある間違い

  • .dockerignoreでファイルを除外してしまっている
  • WindowsでGitがCRLFに変換する設定になっている
  • alpineイメージでbashが存在しないのに#!/bin/bashを使う
  • COPY . .の後にファイルを上書きしてしまう

関連エラー

参考リンク

Docker の他のエラー

最終更新: 2025-12-13