首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile:试图运行shell-script时的代码127

Dockerfile:试图运行shell-script时的代码127
EN

Stack Overflow用户
提问于 2017-07-26 11:08:06
回答 2查看 5.1K关注 0票数 0

Windows 10主机上运行Docker工具箱

有一个Dockerfile

代码语言:javascript
复制
FROM 16.04
...
RUN if [ some_condition ]; then ./foo.sh; fi
...

有一个foo.sh

代码语言:javascript
复制
#!/bin/bash
...
echo 'Me working'

现在,当试图构建Docker映像时:

代码语言:javascript
复制
docker build -t name_of_the_image .

获取错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
FROM ubuntu:16.04
MAINTAINER Mr Anderson "mr@anderson.com"

# set workdir
COPY . /app
WORKDIR /app

# Run scripts
RUN ./foo.sh
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-26 12:19:31

经进一步调查后:

  • 使用CMD over并不是一个完美的解决方案,因为这些命令的工作方式。运行可以使用任意次数,以逐层构建Docker映像,而CMD只能在映像生成时执行一次。

就我而言,解决办法是:

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

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

票数 1
EN

Stack Overflow用户

发布于 2017-07-26 11:11:51

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

另外,由于在调用脚本时使用的是相对路径,所以一定要设置WORKDIR。

代码语言:javascript
复制
COPY ./foo.sh /app/foo.sh
WORKDIR /dir
RUN chmod +x /app/foo.sh
RUN if [ some_condition ]; then ./foo.sh; fi

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45325165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档