Docker 既然它确实存在,为什么找不到呢?

Docker 既然它确实存在,为什么找不到呢?,docker,Docker,在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/pr

在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:notfound
错误,尽管
/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
存在于您的(主机上),但您需要先将其添加到映像:

COPY provision/provision.sh /provision/provision.sh
# or
COPY provision /provision/
RUN chmod 755 /provision/provision.sh && \
    /provision/provision.sh
如文件所述:

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

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

将在中间容器中执行命令,该容器使用编译到该行的Dockerfile内容启动。

这意味着它在容器的上下文中执行某些内容,而不是在主机的上下文中执行。

provision/provision.sh
存在于您的(主机上),但您需要首先将其添加到映像中:

COPY provision/provision.sh /provision/provision.sh
# or
COPY provision /provision/
RUN chmod 755 /provision/provision.sh && \
    /provision/provision.sh
如文件所述:

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

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

将在中间容器中执行命令,该容器使用编译到该行的Dockerfile内容启动。

这意味着它在容器的上下文中执行某些操作,而不是在主机的上下文中。

在我的例子中,provision.sh文件是dos行结束文件。我需要使用Unix行结尾重新保存文件

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

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

这是:


在我的例子中,provision.sh文件是dos行结束文件。我需要使用Unix行结尾重新保存文件

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

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

这是:


请检查编辑above@simo我已经编辑了答案,并附上了文档。尝试
复制规定/provision/
。不要使用添加(请参阅)。@simo我刚刚添加了chmod 755步骤,以确保脚本在图像上下文中可执行。我很快就会尝试,我的孩子绑架了电脑@西莫:嗯。。。它实际上在Minecraft(:)中,或者Minecraft服务器本身在一个容器中()请检查编辑above@simo我已经编辑了答案,并附上了文档。尝试
复制规定/provision/
。不要使用添加(请参阅)。@simo我刚刚添加了chmod 755步骤,以确保脚本在图像上下文中可执行。我很快就会尝试,我的孩子绑架了电脑@西莫:嗯。。。它实际上在Minecraft(:)中,或者Minecraft服务器本身在一个容器中()我很高兴您找到了根本原因+1.下次,如果答案不是真实的,就不要接受;)谢谢@VonC,下次我会做:)我很高兴你找到了根本原因+1.下次,如果答案不是真实的,就不要接受;)谢谢@VonC,下次我会的:)