apache 无法可靠地确定服务器的完全限定域名...如何在Docker中解决?

hs1rzwqc  于 2022-11-16  发布在  Apache
关注(0)|答案(6)|浏览(316)

我刚刚开始使用Docker,我遵循的是tutorial,它基本上显示了以下步骤:
1.创建一个如下所示的Dockerfile:

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

1.从我的dockerfile所在的位置构建容器:

$ docker build -t mytest .

1.生成“mytest”映像后,我使用以下命令运行它:

$ docker run  -p 80 mytest

这就是我所得到的错误:
AH00558:apache2:无法使用172.17.0.2可靠地确定服务器的完全限定域名。全局设置“ServerName”指令以禁止显示以下消息AH 00558:apache 2:无法使用172.17.0.2可靠地确定服务器的完全限定域名。全局设置“ServerName”指令以抑制此消息[Sun Sep 17 16:25:12.340564 2017] [mpm_prefork:notice] [pid 1] AH 00163:Apache/2.4.10(Debian)PHP/7.0.23已配置--恢复正常操作[2017年9月17日星期日16:25:12.340666] [核心:通知] [pid 1] AH 00094:命令列:'apache 2-D前景'
所以我不知道怎么解决。有什么想法吗?

wtzytmuj

wtzytmuj1#

我想提供另一种(可能更像Docker-ish)解决警告消息的方法。但首先,在盲目地设置ServerName之前,了解 * Apache实际上是 * 做什么来计算域名是有意义的。http://ratfactor.com/apache-fqdn.html上有一篇很好的文章解释了这个过程。
一旦我们能够确认getnameinfo是Apache用来查找名称的,并且它使用/etc/nsswitch.conf来确定查找的第一步,我们就可以确定要修改的内容。
如果我们检查容器内的nsswitch.conf,我们可以看到它在外部DNS之前在/etc/hosts文件中查找主机:

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

知道了这一点,也许我们可以在Docker运行时影响文件,而不是将其添加到我们的配置文件中?
如果我们看一下Docker运行参考文档,在www.example.com上有一节关于/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和完全限定域名的知识。

q5iwbnjs

q5iwbnjs2#

这不是一个错误,它只是一个警告,您可以放心地忽略它。它的意思是ServerName没有设置,因此它将假定计算机IP相同。
如果查看/etc/apache2/sites-available中存在的默认配置,您会发现000-default.confdefault-ssl.conf

root@d591ab6febff:/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 webmaster@localhost
    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从默认配置文件覆盖这些文件。然后警告就会消失。

z3yyvxxp

z3yyvxxp3#

问题:

运行Docker文件时出现以下错误:
AH00558:apache2:无法使用172.17.0.2可靠地确定服务器的完全限定域名。请全局设置“ServerName”指令以禁止显示此消息

解决方案:

后藤root
后藤etc文件
然后后藤apache2
然后是nano apache2.conf文件
然后在# The directory where shm and other runtime files will be stored.行下方输入新行(Enter)并写入:

ServerName localhost

保存文件并退出root,然后再次运行docker run命令,它将工作。
同一问题的Youtube视频参考链接:Watch

jqjz2hbq

jqjz2hbq4#

要避免出现该警告,可以将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期)

oyjwcjzk

oyjwcjzk5#

我过去常加

sed -i -e 's/Listen 80/Listen 80\nServerName localhost/' /etc/apache2/ports.conf

或者添加到Dockerfile或入口点文件(如果使用的话)。

ulmd4ohb

ulmd4ohb6#

如果您正在使用Docker,请执行以下操作:将ServerName localhost从Docker文件添加到apache2.conf,然后重新启动服务器

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf

RUN service apache2 restart

这应该可以消除警告。
您也可以从终端执行此操作

echo "ServerName localhost" >> /usr/local/etc/apache2/apache2.conf

不要忘记重新启动服务器

sudo systemctl restart apache2

服务器重新启动后,错误应消失。

相关问题