为什么不能find,而它确实存在?

在Windows 10上,当我运行:

$ docker build . 

我在控制台中得到这个错误:

  RUN /provision/provision.sh ---> Running in e66928c3c893 /bin/sh: 1: /provision/provision.sh: not found 

我的文件夹文件:

 /Dockerfile /provision /provision/provision.sh 

那么为什么我得到/bin/sh: 1: /provision/provision.sh: not found错误,尽pipe/provision/provision.sh存在?

编辑

我试过了:添加条款/条款

我试过了:

 COPY provision /provision 

没有工作..

 Step 7 : COPY provision /provision ---> c5d07de6948d Removing intermediate container 85768981a7f0 Step 8 : RUN /provision/provision.sh ---> Running in 8426a8526514 /bin/sh: 1: /provision/provision.sh: not found SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories. The command '/bin/sh -c /provision/provision.sh' returned a non-zero code: 127 

provision/provision.sh存在于您的Docker构build上下文中 (在您的主机上),但是您需要首先将其复制( COPY )到图像中:

 COPY provision/provision.sh /provision/provision.sh # or COPY provision /provision/ RUN chmod 755 /provision/provision.sh && \ /provision/provision.sh 

正如文档中提到的那样:

如果<src>是一个目录,则复制该目录的全部内容,包括文件系统元数据。

注意:目录本身不被复制,只是它的内容。

RUN将在一个中间容器中执行一个命令,这个容器的Dockerfile内容编译到这一行。
这意味着它在容器的上下文中执行某些操作,而不是在宿主的上下文中执行。

在我的情况下,provision.sh文件是一个dos行结束文件。 我需要使用Unix行尾重新保存文件。

我发现这两个答案对解决这个问题非常有帮助:

 RUN rm /bin/sh && ln -s /bin/bash /bin/sh 

在Dockerfile中使用'source'运行指令不起作用

和这个:

./configure:/ bin / sh ^ M:糟糕的解释器