Docker命令在构build期间失败,但在运行容器内执行时成功

命令 :

docker build -t nginx-ubuntu . 

以下是Dockerfile:

从Ubuntu的:12.10
运行apt-get更新
运行apt-get -y install libpcre3 libssl-dev
运行apt-get -y install libpcre3-dev
运行apt-get -y install wget zip gcc
运行wget http://nginx.org/download/nginx-1.4.1.tar.gz
运行gunzip nginx-1.4.1.tar.gz
运行tar -xf nginx-1.4.1.tar
运行wget  - 无检查证书https://github.com/max-l/nginx_accept_language_module/archive/master.zip
 RUN解压主
运行cd nginx-1.4.1
 RUN ./configure --add-module = .. / nginx_accept_language_module-master --with-http_ssl_module --with-pcre = / lib / x86_64-linux-gnu --with-openssl = / usr / lib / x86_64-linux- GNU

在最后一行失败(./configure …)

如果我删除最后一行并在容器中运行一个bash,并手动执行最后一行,它将起作用。

我期望无论命令在容器中成功运行的任何命令应附加在Dockerfile(前缀由运行)

我错过了什么?

pwd在RUN命令中不是永久的。 您需要在同一个RUN中进行cd和configuration。

这个Dockerfile工作正常:

 FROM ubuntu:12.10 RUN apt-get update RUN apt-get -y install libpcre3 libssl-dev RUN apt-get -y install libpcre3-dev RUN apt-get -y install wget zip gcc RUN wget http://nginx.org/download/nginx-1.4.1.tar.gz RUN gunzip nginx-1.4.1.tar.gz RUN tar -xf nginx-1.4.1.tar RUN wget --no-check-certificate https://github.com/max-l/nginx_accept_language_module/archive/master.zip RUN unzip master RUN cd nginx-1.4.1 && ./configure --add-module=../nginx_accept_language_module-master --with-http_ssl_module --with-pcre=/lib/x86_64-linux-gnu --with-openssl=/usr/lib/x86_64-linux-gnu 

作为@ creak的答案的替代scheme,可以使用WORKDIR命令更改Dockerfile中的默认工作目录:

 FROM ubuntu:12.10 # Run update & install together so that the docker cache doesn't # contain an out-of-date APT cache (leading to 404's when installing # packages) RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install libpcre3 libssl-dev libpcre3-dev wget zip gcc ADD http://nginx.org/download/nginx-1.4.1.tar.gz nginx-1.4.1.tar.gz RUN tar -zxf nginx-1.4.1.tar.gz RUN wget --no-check-certificate https://github.com/max-l/nginx_accept_language_module/archive/master.zip RUN unzip master WORKDIR nginx-1.4.1 RUN ./configure --add-module=../nginx_accept_language_module-master --with-http_ssl_module --with-pcre=/lib/x86_64-linux-gnu --with-openssl=/usr/lib/x86_64-linux-gnu 

这也会影响使用docker run时的默认目录(由-w开关覆盖)。

当我用RUN调用wgettar ,我需要指定一个path,如果您想使用WORKDIR作为path,ADD看起来就是正确的方法。 所以下面的任何一个解决了我的问题。

 RUN wget http://nginx.org/download/nginx-1.4.1.tar.gz -P ~/directory RUN tar -zxf ~/directory/nginx-1.4.1.tar.gz -C ~/directory 

要么

 WORKDIR ~/directory ADD http://nginx.org/download/nginx-1.4.1.tar.gz nginx-1.4.1.tar.gz RUN tar -zxf nginx-1.4.1.tar.gz 

第二种方法阻止了我需要在容器中安装wget。