una tutorial instalar imagen hub guardar ejemplos desde crear contenedor cero docker

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