2016-04-26 52 views
3

Dockerコンテナで.htaccessファイルを更新しようとしています。ファイルを更新した後、私はApacheを再起動する必要があります。私は、Apacheを再起動しようとするたびに:コマンドservice apache2 restartと私は次のエラーを取得する:DockerでApacheを再起動

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs Action 'start' failed. The Apache error log may have more information. ...fail!

私はエラーになったとき、それは新たなエラーを持っていませんログインします。 これは私のDockerfileは、次のようになります。

FROM ubuntu:12.04 

# Install dependencies 
RUN apt-get update -y 
RUN apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql php5-curl vim 

# Install app 
RUN rm -rf /var/www/ * 
ADD src /var/www 

# Configure apache 
RUN a2enmod rewrite 
RUN chown -R www-data:www-data /var/www 
ENV APACHE_RUN_USER www-data 
ENV APACHE_RUN_GROUP www-data 
ENV APACHE_LOG_DIR /var/log/apache2 

EXPOSE 80 

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"] 
+0

'.htaccess'を変更すると、Apacheを再起動する必要はありません...おそらく、ポート80でリッスンしている他のプログラムがあるかどうかを調べる必要があります。プログラミングと関係します。 [スーパーユーザー](http://superuser.com)は正しいプラットフォームです(クロスポストしないでください)。 –

答えて

2

あなたは(正しく)ときdocker runコンテナサービスとしてApacheを起動していないためです。行:

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"] 

フォアグラウンドでapacheを開始します。

あなたはdocker execを使用してファイルを編集してApacheを再起動するためにコンテナ内のシェルを実行していると思いますか?もしそうなら、これは2回目にあなたがApacheを起動する理由を説明します。それは既存のプロセスについて不平を言います。

私はこのような方法でコンテナを使用している場合、それらを不変として扱い、データをコンテナの外側(ホスト上またはボリューム内)に保持するとあなたは簡単にコンテナを交換することができます。あなたのケースでは

あなたは.htaccessファイルを変更する必要がある場合、私はのようなコマンドを使用して、コンテナにそのファイルをマウントするより正常なことだと思う:あなたは変更する必要があれば次に

docker run -d --name apache -v $(pwd)/.htaccess:/path/to/.htaccess -p 80:80 image:tag 

ファイルとは、あなたが使用することができますApacheを再起動する必要があります。

docker restart apache 

それはあなたも、Apacheを再起動する必要はないかもしれませんシャーロットDunoisからの提案を検討する価値があるかもしれないが。

関連する問題