Docker

無法在 docker 中執行腳本文件,沒有這樣的文件或目錄

  • December 28, 2020

我有一個像這樣的 Dockerfile:

FROM alpine

COPY setup.sh /setup.sh

CMD ["/setup.sh"]

我的 setup.sh 是這樣的:

#!/bin/sh

echo "hello world"

嘗試執行這些命令:

docker build .
docker run --name test 61230f9f45ad

返回的錯誤是這樣的:

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

我在 Windows 10 LTSB 上使用 Powershell,docker 版本是17.12.0-ce, build c97c6d6. 為什麼?

可能是 Windows 風格的行尾打破了它。以下是使用 Windows 行結尾保存文件時的外觀,但以 Unix 樣式讀取:

#!/bin/sh^M
^M
echo "hello world"^M 

在解釋 shebang (#!) 時,exec將看到一個額外的輸入符(表示為CR, \r, ^M)並且找不到/bin/sh^M

$ exec ./setup.sh
bash: setup.sh: /bin/sh^M: bad interpreter: No such file or directory 

使用 Unix 樣式的行結尾保存文件。在 Windows 上,體面的文本編輯器(Sublime Text、Notepad++、任何 IDE 等)應該能夠做到。還有一個名為 dos2unix 的簡單命令行工具,它完全符合您的期望。

引用自:https://unix.stackexchange.com/questions/433444