Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dockerfile:尝试运行shell脚本时的代码127_Shell_Docker - Fatal编程技术网

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

Dockerfile:尝试运行shell脚本时的代码127,shell,docker,Shell,Docker,在Windows 10主机上运行Docker Toolbox 有一个Dockerfile: FROM 16.04 ... RUN if [ some_condition ]; then ./foo.sh; fi ... #!/bin/bash ... echo 'Me working' FROM ubuntu:16.04 MAINTAINER Mr Anderson "mr@anderson.com" # set workdir COPY . /app WORKDIR /app # Ru

Windows 10主机上运行Docker Toolbox

有一个Dockerfile

FROM 16.04
...
RUN if [ some_condition ]; then ./foo.sh; fi
...
#!/bin/bash
...
echo 'Me working'
FROM ubuntu:16.04
MAINTAINER Mr Anderson "mr@anderson.com"

# set workdir
COPY . /app
WORKDIR /app

# Run scripts
RUN ./foo.sh
有一个foo.sh

FROM 16.04
...
RUN if [ some_condition ]; then ./foo.sh; fi
...
#!/bin/bash
...
echo 'Me working'
FROM ubuntu:16.04
MAINTAINER Mr Anderson "mr@anderson.com"

# set workdir
COPY . /app
WORKDIR /app

# Run scripts
RUN ./foo.sh
现在,在尝试构建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 16.04
...
RUN if [ some_condition ]; then ./foo.sh; fi
...
#!/bin/bash
...
echo 'Me working'
FROM ubuntu:16.04
MAINTAINER Mr Anderson "mr@anderson.com"

# set workdir
COPY . /app
WORKDIR /app

# Run scripts
RUN ./foo.sh

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

此外,由于在调用脚本时使用的是相对路径,因此请确保设置WORKDIR

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

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

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

此外,由于在调用脚本时使用的是相对路径,因此请确保设置WORKDIR

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

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

进一步调查后:

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

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

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

经过进一步调查:

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

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

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

好主意。不幸的是,情况并非如此-已经使用
COPY将所有文件复制到docker/应用程序
。哈哈,很好,我删除了那条评论,很高兴你在它消失之前看到了它。。。但很高兴这起了作用。玩得开心!好主意。不幸的是,情况并非如此-已经使用
COPY将所有文件复制到docker/应用程序
。哈哈,很好,我删除了那条评论,很高兴你在它消失之前看到了它。。。但很高兴这起了作用。玩得开心!哇,这原来也是我的问题。花了很多时间寻找答案,结果发现是行尾。。。。欢迎来到在Windows机器上运行docker的世界。哇,这也是我的问题。花了很多时间寻找答案,结果发现是行尾。。。。欢迎来到在Windows机器上运行docker的世界。