docker build 時に Text file busy で shell が実行できない対策
概要
Dockerfile 内に以下のように shell の実行を記述していました。
1 | RUN chmod +x hoge.sh \ |
上記記述のある状態で docker build
実行した所、以下のようなエラーに遭遇しました。
1 | /bin/sh: hoge.sh: Text file busy |
What is Text file busy ?
書き込みのために現在開いている手続きのみの (共用テキスト) ファイルを実行しようとした場合や、実行中の手続きのみのファイルを書き込みのために開こうとしたり、削除しようとしたりする場合に発生します。
上記鑑みるとchmod +x hoge.sh
実行中に hoge.sh
を実行しようとしたが為に発生しているということ??
と推測。
環境情報
- Ubuntu 14.04.5 LTS \n \l
- Docker version 17.05.0-ce, build 89658be
- Base Image: ruby:2.5-alpine
対策
以下 sync 処理を追加し無事問題解決できました。
1 | RUN chmod +x hoge.sh \ |
What is sync command ?
sync - システム管理コマンドの説明 - Linux コマンド集 一覧表
sync - システム管理コマンドの説明。sync - ディスク上のデータをメモリと同期させる。
参考
Running chmod on file results in 'text file busy' when running straight after. · Issue #9547 · moby/moby
Dockerfile contents are: FROM debian WORKDIR /app COPY . /app CMD [ "/app/a.sh" ] Contents of 'a.sh' are: #!/bin/sh echo 'A' sh /app/b.sh 1 …
cpとmvとinodeの話 - Qiita
実行中のファイルに対して、cpで上書きする場合だと、Text file busyで置き換えられず、mvだと何も聞かれず置き換えられます。この挙動の違いについて、まとめと実験。inodeを見る…
docker build 時に Text file busy で shell が実行できない対策
https://kenzo0107.github.io/2018/04/17/2018-04-18-fix-text-file-busy-on-docker-build/