【问题标题】:Dockerfile RUN command returning "No such file or directory"Dockerfile RUN 命令返回“没有这样的文件或目录”
【发布时间】:2017-03-04 02:00:02
【问题描述】:

尝试创建一个 Dockerfile 来创建一个系统,该系统包括在 CentOS 7 系统上自定义构建的 Python 3。我的 Dockerfile 如下:

FROM centos:7

RUN yum -y update
RUN yum -y upgrade
RUN yum -y groupinstall "Development Tools"
RUN yum -y install zlib-devel bzip2-devel sqlite sqlite-devel openssl-devel
ADD http://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz Python-3.5.2.tgz

RUN ["tar","zxf","Python-3.5.2.tgz"]
WORKDIR "/Python-3.5.2"
RUN "./configure --prefix=/usr/local"
RUN "make"
RUN "make altinstall"
RUN ["rm","-rf","Python-3.5.2"]

RUN yum -y clean headers &&\
yum -y clean packages &&\
yum -y clean metadata

COPY pack/*.py /usr/src/StorageService/

RUN ["/usr/local/bin/pip3.5","install","virtualenv"]
WORKDIR "/usr/src/StorageService"
RUN ["virtualenv","--python=python3","--always-copy","SSEnv"]
RUN ["source","SSEnv/bin/activate"]
RUN ["/usr/local/bin/pip3.5","install","requests"]
RUN ["/usr/local/bin/pip3.5","install","gunicorn"]

CMD ["gunicorn","--bind=5000","app"]

它一直到“RUN ./configure --prefix=/usr/local”行,然后给我一个“没有这样的文件或目录”消息。 截图:

... previous steps etc. ...
Step 8 : RUN tar zxf Python-3.5.2.tgz
 ---> Running in 40f96306f38a
 ---> 95804837192a
Removing intermediate container 40f96306f38a
Step 9 : WORKDIR "/Python-3.5.2"
 ---> Running in d8cff5664038
 ---> 038c6b892731
Removing intermediate container d8cff5664038
Step 10 : RUN "./configure --prefix=/usr/local"
 ---> Running in 49b410bed643
/bin/sh: ./configure --prefix=/usr/local: No such file or directory
The command '/bin/sh -c "./configure --prefix=/usr/local"' returned a non-zero code: 127

当我将容器 038c6b892731 启动到 bash 会话中时,“./configure --prefix=/usr/local”命令按预期工作:

$ docker run -it 038c6b892731 bash
[root@3aeaea02fede Python-3.5.2]# ./configure --prefix=/usr/local
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
... etc. ...

我尝试将 RUN 命令更改为 "RUN ["./configure","--prefix=/usr/local"]",唯一的输出变化是错误消息的格式略有不同。

这是运行在:

$ docker -v
Docker version 1.12.2, build bb80604

【问题讨论】:

  • 你可能在另一个当前目录...
  • 您可能需要考虑将多个RUN 命令组合成一个多行命令。在Docker docs 中有一个很好的解释说明你为什么要这样做
  • 其实我最初确实有一堆组合。我将它们分开,试图找出构建过程到底出了什么问题。现在它正在工作,我可能最终会为最终版本重新组合一堆。

标签: python docker build dockerfile


【解决方案1】:

我运行您的 Dockerfile 时出现同样的错误。

但是当我从这里改变时:

     RUN "./configure --prefix=/usr/local"

到这里:

     RUN ./configure --prefix=/usr/local

RUN "make" 还是有问题,所以你还需要像这样更改 Dockerfile:

RUN ["tar","zxf","Python-3.5.2.tgz"]
WORKDIR "/Python-3.5.2"
RUN ./configure --prefix=/usr/local
# changed 
RUN make
# changed 
RUN make altinstall
RUN ["rm","-rf","Python-3.5.2"]

这对我有用。 或者你可以使用RUN ["xy","ab"] 的方式,就像@Rao 回答的那样。

【讨论】:

  • 这行得通。谢谢。而且我已经尝试了 RUN ["./configure","--prefix=/usr/local"] 表单,我得到了同样的错误信息。
【解决方案2】:

Dockerfile 有一些细微的变化,如下所示:

所以,请更改以下行
来自:

ADD http://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz Python-3.5.2.tgz

RUN ["tar","zxf","Python-3.5.2.tgz"]
WORKDIR "/Python-3.5.2"
RUN "./configure --prefix=/usr/local"

收件人:

ADD http://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz /Python-3.5.2.tgz

RUN ["tar","zxf","/Python-3.5.2.tgz"]
WORKDIR "/Python-3.5.2"
RUN ["./configure", "--prefix=/usr/local"]

【讨论】:

  • 正如我在原始帖子中提到的,我尝试过该表单并收到完全相同的错误消息。
猜你喜欢
  • 2017-04-12
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多