Как установить хороший PATH apache2ctl в окружении Docker - PullRequest
0 голосов
/ 11 марта 2019

Вот мой Dockerfile:

FROM debian

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/web/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2

#RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get -y -q upgrade && apt-get -y -q install apache2
RUN  apt-get update && apt-get -y -q upgrade && apt-get -y -q install apache2

EXPOSE 80 443

CMD  ["/usr/sbin/apache2ctl","-D","FOREGROUND","&"]

Когда я запускаю свой контейнер, система вызывает apache2 вместо apache2ctl, и у меня появляется это сообщение об ошибке:

:~/strech_apache$ docker container run -ti -p 80:80 system/strech_apache
Usage: /usr/sbin/apache2 [-D name] [-d directory] [-f file]
                         [-C "directive"] [-c "directive"]
                         [-k start|restart|graceful|graceful-stop|stop]
                         [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X]
Options:
  -D name            : define a name for use in <IfDefine name> directives
.../...
    Action '-D FOREGROUND &' failed.
    The Apache error log may have more information.

Когда я запустил свой Dockerfile как контейнер без строки CMD в интерактивном режиме, я смог запустить apache2ctl -D FOREGROUND &, и у меня появилась работающая по умолчанию страница apache.

UPDATE

Когда я сделал свой Dockefile со строкой CMD следующим образом:

CMD ["apache2ctl","-D","FOREGROUND"]

Мое сообщение об ошибке изменилось следующим образом:

system@vmdebian:~/strech_apache$ docker container run -ti -p 80:80 system/strech_apache:strech
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
system@vmdebian:~/strech_apache$ 

То же самое, если бы я написал свой CMD так:

CMD  ["service","apache2","restart"]

У меня есть это сообщение

system@vmdebian:~/strech_apache$ docker container run -ti -p 80:80 system/strech_apache:strech 
[....] Restarting Apache httpd web server: apache2AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
. ok 

Это похоже на включение / выключение apache и остановка контейнера с остановкой apache2

Как запустить apache2?

1 Ответ

0 голосов
/ 12 марта 2019

Удалите последний аргумент "&" из вашего CMD.

Здесь есть две основные проблемы, и удаление & исправляет оба:

При использовании CMD ["command", "arg", "..."]форма, Docker вообще не запускает оболочку;он просто запускает команду и передает заданные аргументы.Ваш CMD запускает apache2ctl с тремя аргументами: -D, FOREGROUND и &.apache2ctl запускает apache2 с указанными аргументами, но не понимает & в качестве аргумента, что является ошибкой, которую вы получаете.

Кроме того, ваш CMD (или ENTRYPOINT) должен запускать свой процесс как приоритетный процесс .Если вы наберете команду в своей оболочке и сразу получите запрос оболочки, если вы попытаетесь сделать эту команду основной командой в контейнере, контейнер сразу же выйдет при запуске.Вы не хотите, чтобы обычная оболочка «запускалась в фоновом режиме» означала здесь &;вы хотите, чтобы Apache выполнялся как процесс переднего плана, а контейнер - до тех пор, пока работает Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...