tutorial - El comando Docker falla durante la compilación, pero tiene éxito mientras se ejecuta dentro del contenedor en ejecución
imagen docker ubuntu (3)
El comando :
docker build -t nginx-ubuntu .
Con el Dockerfile debajo:
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
Falla en la última línea (./configura ...)
Si elimino la última línea y ejecuto un bash en el contenedor, y ejecuto la última línea manualmente, funciona.
Yo esperaría que cualquier comando que se ejecute con éxito dentro de un contenedor debería funcionar cuando se agregue el comando en el Dockerfile (prefijado por RUN)
Me estoy perdiendo de algo ?
Como alternativa a la respuesta de @ creak, puede cambiar el directorio de trabajo predeterminado en un Dockerfile con el comando WORKDIR
:
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
Esto también afecta al directorio predeterminado cuando utiliza la función de docker run
(anulada por el interruptor -w
).
Cuando llamé a wget
o tar
con RUN Necesitaba especificar una ruta, parece que ADD es el enfoque correcto si desea usar WORKDIR como ruta. Así que cualquiera de los siguientes resuelve mi problema.
CORRER
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
o
AÑADIR
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
El segundo enfoque me impidió tener que instalar wget en el contenedor.
El pwd no es persistente en los comandos RUN. Necesitas cd y configurar dentro del mismo RUN.
Este Dockerfile funciona bien:
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