Docker命令在构建过程中失败,但在运行的容器中执行时成功

sr4lhrrt  于 2022-09-19  发布在  Docker
关注(0)|答案(4)|浏览(225)

该命令如下:

docker build -t nginx-ubuntu .

使用下面的Docker文件:

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
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中(前缀为run)时都能正常工作

我错过了什么吗?

vlurs2pr

vlurs2pr1#

PWD在运行命令之间不是持久的。您需要在同一次运行中执行cd和配置。

此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
jum4pzuy

jum4pzuy2#

作为@creak答案的替代方案,您可以使用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开关覆盖)时,这也会影响默认目录。

mdfafbf1

mdfafbf13#

当我用run调用wgettar时,我需要指定一个路径,如果您想使用WORKDIR作为它的路径,那么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。

dgsult0t

dgsult0t4#

执行此操作的另一种方法是使用\运算符开始一个新行并继续执行另一个命令

示例

RUN cd /Desktop  
    cd Work    
    pwd

相关问题