登录
首页 >  Golang >  Go问答

找不到/go/src/test.sh: /bin/sh: 1

来源:stackoverflow

时间:2024-03-22 18:27:36 441浏览 收藏

在构建 Dockerfile 时,用户遇到了错误“找不到 /go/src/test.sh: /bin/sh: 1”,表明 Docker 容器中无法找到名为“test.sh”的脚本。尽管脚本已成功复制到容器中,但容器中的 /bin/sh 解释器无法执行该脚本。

问题内容

我正在尝试构建此 dockerfile,文件已成功复制,但我不断收到以下错误:

docker build --no-cache=true -f dockerfile-gobase .

发送构建 docker 守护进程的上下文 34mb 步骤 1/3 :来自 golang:1.11.2 ---> df6ac9d1bf64 步骤2/3:复制./test.sh /go/src/ ---> 38a538f0289d 步骤3/3:运行(ls -l /go/src/ && cd /go/src/ && /go/src/test.sh) ---> 在 089de53d11f0 中运行 总计 4 -rwxr-xr-x 1 root root 34 jan 24 03:22 test.sh /bin/sh: 1: /go/src/test.sh: 未找到 命令 '/bin/sh -c (ls -l /go/src/ && cd /go/src/ && /go/src/test.sh)' 返回一个非零代码:127

这些是文件代码

dockerfile-gobase

from golang:1.11.2
copy ./test.sh /go/src/
run (ls -l /go/src/ && cd /go/src/ && /go/src/test.sh)

test.sh

#!/bin/sh
echo "hello world"

解决方案


您通过检查脚本是否存在于带有 ls 的容器中消除了第一个原因。这也消除了 Linux 文件权限。

下一个可能的原因是您的解释器不在容器中,但显示脚本时我们看到它是 #!/bin/sh/bin/sh 包含在您的基础映像中。

我能想到的还有文件中的 Windows 换行符、某个地方缺少的库,或者可能是具有严格配置的安全工具,例如 SE Linux/AppArmor。在这种情况下,看起来 Windows 换行就是原因。您只需将编辑器配置为使用 Linux 样式换行符进行输出即可。否则,Linux 正在寻找 /bin/sh\R 来运行(其中 \R 是回车符),并且该命令不存在。

这包含在我的 DockerCon 18 talk 中,其中包含许多其他提示,您在开始时可能会发现有用。

今天关于《找不到/go/src/test.sh: /bin/sh: 1》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>