2017-06-05 16 views
5

Próbuję utworzyć plik Dockerfile, który automatycznie uruchomi apache. Nic nie zadziałało. Ale jeśli loguję się do kontenera i uruchamiam service apache2 start to działa. Dlaczego nie mogę uruchomić tego polecenia z mojego pliku Dockerfile?Jak automatycznie uruchomić apache2 w pojemniku dokera?

FROM ubuntu 

# File Author/Maintainer 
MAINTAINER rmuktader 

# Update the repository sources list 
RUN apt-get update 

# Install and run apache 
RUN apt-get install -y apache2 && apt-get clean 

#ENTRYPOINT ["/usr/sbin/apache2", "-k", "start"] 


#ENV APACHE_RUN_USER www-data 
#ENV APACHE_RUN_GROUP www-data 
#ENV APACHE_LOG_DIR /var/log/apache2 

EXPOSE 80 
CMD service apache2 start 

Odpowiedz

9

Problem jest tutaj: CMD service apache2 start Po wykonaniu tego polecenia apache2 proces zostanie oderwana od skorupy. Ale Docker działa tylko wtedy, gdy główny proces jest żywy.

Decyzja dotyczy uruchomienia apache w foregroud. Dockerfile musi wyglądać tak: (zmieniła się tylko ostatnia linia).

FROM ubuntu 

# File Author/Maintainer 
MAINTAINER rmuktader 

# Update the repository sources list 
RUN apt-get update 

# Install and run apache 
RUN apt-get install -y apache2 && apt-get clean 

#ENTRYPOINT ["/usr/sbin/apache2", "-k", "start"] 


#ENV APACHE_RUN_USER www-data 
#ENV APACHE_RUN_GROUP www-data 
#ENV APACHE_LOG_DIR /var/log/apache2 

EXPOSE 80 
CMD apachectl -D FOREGROUND 
+0

to nie działa. Skopiowałem i wkleiłem twój plik Dockerfile, uruchomiłem 'docker build -t my_img .', uruchomiłem' docker run -ti -p80: 80 --name 'test2' my_img/bin/bash' ale apache nie był uruchomiony. –

+0

Próbowałem tego podejścia i to działa dla mnie. Spróbuj usunąć '/ bin/bash' z twojego polecenia: –

+0

To zadziałało! Czy to działa w przypadku wielu usług? –

Powiązane problemy