Docker
無法在 docker 中執行腳本文件,沒有這樣的文件或目錄
我有一個像這樣的 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 的簡單命令行工具,它完全符合您的期望。