2016-10-21 80 views
0

尝试创建一个Dockerfile来创建一个系统,该系统包括一个在CentOS 7系统上自定义构建的Python 3。我Dockerfile如下:Dockerfile RUN命令返回“没有这样的文件或目录”

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"] 

及其所有通过的“运行./configure --prefix =的/ usr /本地”线路的方式,然后给了我一个“没有这样的文件或目录”的消息。 剪断:

... 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 
[[email protected] 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 [”./configure","--prefix=/usr/local“]”,输出中唯一的变化是错误信息的格式稍有不同。

这下运行:

$ docker -v 
Docker version 1.12.2, build bb80604 
+0

您可能会在另一个当前目录中... –

+0

您可能需要考虑将多个“RUN”命令组合成一个多行命令。有一个很好的解释,为什么你会想在[Docker docs]中这样做(https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#minimize-the-number-of-层) – R0MANARMY

+0

我其实原本确实有一堆合并。我已经将它们分开,试图弄清楚构建过程究竟出了什么问题。现在,它正在工作,我可能会最终重组一堆的最终版本。 – Brian

回答

2

我用了同样的错误运行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"] 

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

+0

这工作。谢谢。 我已经尝试了RUN [“./configure","--prefix=/usr/local”]表单,并且收到了相同的错误消息。 – Brian

0

有一些简单的改变在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"] 
+0

正如我在我原来的帖子中提到的,我曾尝试过这种形式并收到完全相同的错误消息。 – Brian

相关问题