我正在尝试构建此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"
答案 0 :(得分:0)
通过使用ls
检查脚本是否存在于容器中,消除了第一个原因。这也消除了Linux文件权限。
下一个可能的原因是您的解释器不在容器中,但是在显示脚本时我们看到它是#!/bin/sh
。并且/bin/sh
包含在您的基本图像中。
我所能想到的就是文件中的Windows换行符,某个地方缺少库或者可能是具有严格配置的安全工具,例如SE Linux / AppArmor。在这种情况下,似乎是Windows换行符引起的。您只需要配置编辑器以使用Linux样式换行符输出即可。否则,Linux将寻找要运行的/bin/sh\R
(其中\R
是回车符),并且该命令不存在。
此内容包含在我的DockerCon 18 talk中,其中包含许多其他技巧,这些技巧在开始时可能会有用。