2013-07-26 9 views
19

を実行している内に実行しながら、成功します。ドッカーコマンドは、ビルド時に失敗しますが、コマンドコンテナ

docker build -t nginx-ubuntu . 

以下Dockerfile whith:

 
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で始まる)

私は何かが足りないのですか?

答えて

35

pwdはRUNコマンドで永続的ではありません。同じRUN内で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 
+4

私はすべてのRUNコマンドが何も保存されていないので、新しいコンテキストを持っていると思います。早速のご返事ありがとうございます ! –

+0

@ MaxL.yes、それは正しいです。 –

+1

cdの代わりにWORKDIRを使用してください。 @ alanfalloonの答えを見てください。 – emisilva

25

、あなたは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スイッチによって上書きされます)を使用すると、デフォルトのディレクトリになります。

+5

+1 'WORKDIR'は、コンテナのビルド中に作業ディレクトリを設定する正しい方法です。これは、次の' 'RUN'、' CMD'、 'ENTRYPOINT'、' COPY'、および 'ADD'命令に適用されます。それ'。 – ThatsNinja

+0

これは私のためには機能しません。 WORKDIRを変更すると、このファイルは使用できません。 – Pumphouse

1

RUNでwgetまたはtarを呼び出したとき、パスを指定する必要がありましたが、代わりにWORKDIRをパスとして使用する場合はADDが正しいアプローチであるように見えます。そこで、以下のいずれかが私の問題を解決しました。

RUN

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をインストールする必要から私を防止します。

関連する問題