我制作了一個運行單個 shell 腳本的小容器。它的 Dockerfile 如下:
FROM centos:centos7.9.2009
RUN mkdir -p /var/lib/test
COPY ./ /var/lib/test/
RUN yum -y localinstall /var/lib/test/*.rpm
ENTRYPOINT ["sh /var/lib/test/test.sh"]
但是,當我運行影像時,它會回傳錯誤:
#docker run -it test:1.0
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:290: starting container process caused "exec: \"sh /var/lib/test/test.sh\": stat sh /var/lib/test/test.sh: no such file or directory".
腳本檔案肯定存在,因為我可以用 bash 替換它的入口點并手動執行它:
# docker run -it --entrypoint bash test:1.0
[root@e9361c3e67fa /]# sh /var/lib/test/test.sh
Shell script starts...
我看了類似的帖子,確認腳本的權限是正確的,里面的回傳碼都是LF.
而且shell腳本非常簡單:
#!/bin/bash
echo "Test"
exit 0
還有什么可能導致這個問題?
uj5u.com熱心網友回復:
將入口點更改為:
ENTRYPOINT ["/bin/bash", "-c", "/var/lib/test/test.sh"]
uj5u.com熱心網友回復:
當您以互動方式運行sh test.sh時,shell 會為您將其分成兩個單詞。ENTRYPOINT不過, and CMD(and also )的 JSON 陣列形式RUN要求您自己明確地分解單詞。'sh test.sh'正如您在單個陣列條目中撰寫的那樣,與在 shell 提示符下用引號撰寫單個單詞相同。
最方便的答案是將其分解為兩個詞
ENTRYPOINT ["sh", "/var/lib/test/test.sh"]
但是:您根本不需要顯式sh。如果腳本是可執行的(如 中chmod x)并且以行開頭#!/bin/sh,那么系統將能夠確定它是一個標準的 Bourne shell 腳本。你應該能夠運行
ENTRYPOINT ["/var/lib/test/test.sh"]
# (or CMD ["/var/lib/test/test.sh"])
沒有直接說sh任何地方。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/510483.html
標籤:码头工人壳容器
下一篇:無法遠程連接到magento
