https://stackoverflow.com/a/46898038/2062726

ько начинаю в Докере, и я следил за этимруководство это показывает в основном эти шаги:

Создайте Dockerfile следующим образом:

From php:7.0-apache copy src/ /var/www/html EXPOSE 80

Создайте контейнер, из которого у меня есть мой dockerfile:

$ docker build -t mytest .

После генерации изображения «mytest» я запускаю его с:

$ docker run -p 80 mytest

Вот что я получаю как ошибку:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Sun Sep 17 16:25:12.340564 2017] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/7.0.23 configured -- resuming normal operations
[Sun Sep 17 16:25:12.340666 2017] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

Итак, я не знаю, как это решить. Любая помощь?

Ответы на вопрос(4)

Решение Вопроса

больше Docker-иш) способ решения предупреждающего сообщения. Но сначала имеет смысл понятьчто Apache на самом деле делает, чтобы выяснить доменное имя, прежде чем просто вслепуюServerName, Есть хорошая статья наhttp://ratfactor.com/apache-fqdn.html который объясняет процесс.

Как только мы сможем подтвердить, чтоgetnameinfo это то, что Apache использует для поиска имени и что он использует/etc/nsswitch.conf чтобы определить, куда идти в первую очередь для поиска, мы можем выяснить, что нужно изменить.

Если мы проверимnsswitch.conf внутри контейнера мы можем видеть, что он ищет хосты в/etc/hosts файл перед внешним DNS:

# cat /etc/nsswitch.conf | grep hosts
hosts:          files dns

Зная это, может быть, мы можем повлиять на файл во время выполнения Docker вместо того, чтобы добавить его в наши файлы конфигурации?

Если мы посмотрим на справочную документацию по Docker, есть раздел/etc/hosts файл вhttps://docs.docker.com/engine/reference/run/#managing-etchosts, Это упоминает:

Ваш контейнер будет иметь строки в / etc / hosts, которые определяют имя хоста самого контейнера, а также localhost и некоторые другие общие вещи.

Итак, если мы просто установим имя хоста контейнера, он будет добавлен в/etc/hosts который решит предупреждение Apache. К счастью, это очень легко сделать с--hostname или же-h вариант. Если установить полное доменное имя, Docker установит его в нашем/etc/hosts файл и Apache заберет его.

Это довольно легко попробовать. Пример с предупреждением (без имени хоста):

$ docker run --rm php:7.0-apache
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Sun Sep 17 19:00:32.919074 2017] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/7.0.23 configured -- resuming normal operations
[Sun Sep 17 19:00:32.919122 2017] [core:notice] [pid 1] AH00094: Command ,line: 'apache2 -D FOREGROUND'

Теперь с-h опция, указанная для полного доменного имени:

$ docker run --rm -h myapp.mydomain.com php:7.0-apache
[Sun Sep 17 19:01:27.968915 2017] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/7.0.23 configured -- resuming normal operations
[Sun Sep 17 19:01:27.968968 2017] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

Надеюсь, что это поможет ответить на вопрос и даст некоторое представление об Apache и полностью определенных доменных именах.

это просто предупреждение, и вы можете спокойно его игнорировать. Что это говорит о том, чтоServerName не установлен, поэтому он будет считать IP-адрес компьютера таким же.

Если вы посмотрите на конфиги по умолчанию, присутствующие внутри/etc/apache2/sites-available, ты найдешь000-default.conf а такжеdefault-ssl.conf

[email protected]:/etc/apache2/sites-available# cat 000-default.conf
<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    #ServerName www.example.com

    ServerAdmin [email protected]
    DocumentRoot /var/www/html

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Директива ServerName комментируется в конфигурации

#ServerName www.example.com

Так что, если вы беспокоитесь о предупреждении, вы должны изменить его на значение, которое вы хотите, как показано ниже

ServerName www.tarunlalwani.com
ServerAlias tarunlalwani.com

Вам нужно будет создать конфигурацию в вашей папке, а затем перезаписать файлы из конфигурации по умолчанию, используя Dockerfile. Тогда предупреждение исчезнет.

вы можете установить ServerName с вашим IP.

Смотрите этот пример:tagplus5/docker-php/7-apache/Dockerfile

    apt-get install -y --no-install-recommends iproute2 apache2 php7.0 libapache2-mod-php7.0 \
        php7.0-mysql php7.0-sqlite php7.0-bcmath php7.0-curl ca-certificates && \
    apt-get autoremove -y && \
    rm -rf /var/lib/apt/lists/* && \
echo "ServerName $(ip route get 8.8.8.8 | awk '{print $NF; exit}')" >> /etc/apache2/apache2.conf && \

(хотя iproute может работать по-разному на Mac: это зависит от вашего хоста.iproute2mac выпуск 8)

что вы видите в своих журналах, и ваши док-контейнеры немедленно закрываются, это означает, что Apache на самом деле не работает, поэтому контейнер немедленно завершается.

Эта ошибка не имеет прямого отношения к этой проблеме, но это все, с чем мне пришлось работать, и, возможно, кто-то еще находится в аналогичной ситуации.

Вот исправление, чтобы держать это работающим:https://stackoverflow.com/a/46898038/2062726

Ваш ответ на вопрос