2016-04-26 8 views
3

Ich versuche, meine .htaccess-Datei auf einem Docker-Container zu aktualisieren. Nach dem Aktualisieren der Datei muss Apache neu gestartet werden. Jedes Mal, wenn ich versuche, Apache neu zu starten: mit dem Befehl service apache2 restart bekomme ich folgende Fehlermeldung:Apache auf Docker neu starten

(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!

Als ich den Fehler habe es log hat keine neuen Fehler. Das ist das, was meine Dockerfile wie folgt aussieht:

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

Sie müssen Apache nicht neu starten, wenn Sie ".htaccess" ändern ... Vielleicht sollten Sie schauen, ob andere Programme Port 80 überwachen. Auch diese Frage ist off-topic für Stack Overflow, da dies nichts hat mit der Programmierung zu tun haben. [Super User] (http://superuser.com) ist die richtige Plattform (nicht crosspost). –

Antwort

2

Es ist, weil Sie (richtig) nicht Apache als Dienst starten, wenn Sie docker run der Behälter. Die Zeile:

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

Startet den Apache im Vordergrund.

Ich vermute, Sie verwenden dann docker exec, um eine Shell im Container auszuführen, um die Datei zu bearbeiten und Apache neu zu starten? Wenn das der Fall ist, würde das erklären, warum beim zweiten Start von Apache über den bestehenden Prozess geklagt wird.

Ich denke, wenn Sie Container auf diese Weise verwenden, dann verpassen Sie wirklich den Vorteil von Containern, die kommt, wenn Sie sie als unveränderlich behandeln und die Daten außerhalb des Containers (entweder auf Ihrem Host oder in Volumes) so dass Sie den Behälter leicht ersetzen können.

In Ihrem Fall, wenn Sie die .htaccess-Datei Ich denke, ändern müssen wäre es normal sein, dass die Datei in die Behälter zu montieren, indem Sie einen Befehl verwenden wie:

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

Dann, wenn Sie das ändern müssen Datei benötigen und apache neu zu starten, die Sie verwenden können:

docker restart apache 

Obwohl es wert sein kann, den Vorschlag von Charlotte Dunois untersuchen, die Sie nicht einmal apache neu zu starten benötigen.