Apacheを自動的に起動するDockerfileを作成しようとしています。何も機能していません。ただし、コンテナにログインしてservice Apache2 start
できます。なぜDockerfileからそのコマンドを実行できないのですか?
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
問題はこちらです:CMD service Apache2 start
このコマンドプロセスを実行するとApache2
はシェルから切り離されます。ただし、Dockerはメインプロセスが動作している間のみ機能します。
解決策は、Apacheをforegroundで実行することです。 Dockerfile
は次のようになっている必要があります(最後の行のみが変更されています)。
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
私にとって、CMDの最後の行は間違っていました:
# it helped me
CMD ["apachectl", "-D", "FOREGROUND"]