Dockerfile:尝试运行shell脚本时的代码127

Windows 10主机上运行Docker Toolbox

有一个Dockerfile

FROM 16.04 ... RUN if [ some_condition ]; then ./foo.sh; fi ... 

有一个foo.sh

 #!/bin/bash ... echo 'Me working' 

现在,当试图构buildDocker镜像时:

 docker build -t name_of_the_image . 

出错:

 Step 7/12 : RUN ./foo.sh ---> Running in e7e0703d3f8f /bin/sh: 1: ./foo.sh: not found The command '/bin/sh -c ./foo.sh' returned a non-zero code: 127 

我会假设错误127将是Docker不会看到bash。 任何build议如何解决这个问题?


编辑:已经将所有文件复制到Docker, Dockerfile中

 FROM ubuntu:16.04 MAINTAINER Mr Anderson "mr@anderson.com" # set workdir COPY . /app WORKDIR /app # Run scripts RUN ./foo.sh 

在执行/运行脚本之前,您需要将文件复制/复制到容器中。

另外,由于您在调用脚本时正在使用相对path,因此请务必设置WORKDIR。

 COPY ./foo.sh /app/foo.sh WORKDIR /dir RUN chmod +x /app/foo.sh RUN if [ some_condition ]; then ./foo.sh; fi 

还要确保脚本是可执行的。

经过进一步调查:

  • 由于这些命令的工作方式,在RUN上使用CMD并不是一个完美的解决scheme。 RUN可以使用任意次数,逐层构buildDocker镜像,而CMD只能在镜像构build时执行一次。

在我的情况下,解决scheme是:

  • 用VIM打开./foo.sh文件并运行:: :set fileformat=unix并保存文件。

长话短说:在shell脚本结尾的行是不正确的,必须转换为Unix的行。