Dockerfile:尝试运行shell脚本

时间:2017-07-26 11:08:06

标签: shell docker

Windows 10主机上运行 Docker Toolbox

有一个 Dockerfile

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

有一个 foo.sh

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

现在尝试构建Docker镜像时:

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。有任何建议如何解决这个问题?

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

FROM ubuntu:16.04
MAINTAINER Mr Anderson "mr@anderson.com"

# set workdir
COPY . /app
WORKDIR /app

# Run scripts
RUN ./foo.sh

2 个答案:

答案 0 :(得分:1)

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

此外,因为您在调用脚本时使用相对路径,所以请务必设置WORKDIR。

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

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

答案 1 :(得分:0)

经过进一步调查后:

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

就我而言,解决方案是:

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

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