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

时间:2019-01-25 01:36:31

标签: docker go dockerfile

我正在尝试构建此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"

1 个答案:

答案 0 :(得分:0)

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

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

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

此内容包含在我的DockerCon 18 talk中,其中包含许多其他技巧,这些技巧在开始时可能会有用。