【问题标题】:Docker apache2 /etc/hosts ignored works only with localhostDocker apache2 /etc/hosts ignored 仅适用于 localhost
【发布时间】:2019-08-07 21:21:25
【问题描述】:

我已经在单独的容器中成功设置了 Docker、Apache2、PHP。我可以通过http://localhost:8080访问我的网站。

我遇到的问题与 /etc/hosts 文件有关(我认为)。先看一下我的docker-compose文件:

apache2:
    build:
      context: ./apache2/
      dockerfile: Dockerfile
    container_name: apache2
    image: httpd:2.4.39-alpine
    ports:
      - 8080:80
    volumes:
      - ../:/srv/app
    extra_hosts:
      - "custom-website-name.local:127.0.0.1"

如您所见,我确实在其中添加了额外的主机,它甚至出现在容器的 /etc/hosts 文件中。但是,无论我做什么以及我做了什么更改(在 LIVE 容器和配置中手动),我都无法强制我的设置识别那个新主机。

我也有虚拟主机配置:

LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so
LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so

<VirtualHost *:80>
    ServerName www.custom-website-name.local
    ServerAlias custom-website-name.local
    # Proxy .php requests to port 9000 of the php-fpm container
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://webapp:9000/srv/app/public/$1
    DocumentRoot /srv/app/public
    <Directory /srv/app/public>
        DirectoryIndex index.php
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Send apache logs to stdout and stderr
    CustomLog /proc/self/fd/1 common
    ErrorLog /proc/self/fd/2
</VirtualHost>

复制到配置中。目前这一切似乎还不够,我只能通过http://localhost:8080 访问我的网站,而http://custom-website-name.local:8080 给了我This site can’t be reached,这意味着新名称未解析。

问题当然是:我错过了什么?我不知道我还能尝试什么(我确实尝试了很多东西)。

编辑:

我确实也向本地(非 docker)/etc/hosts 添加了一个条目 - 没有帮助。

【问题讨论】:

  • 尝试颠倒条目的顺序。它们在您的 /etc/hosts 文件中应如下所示: 127.0.0.1 custom-website-name.local
  • 我知道你来自哪里。 Docker-compose 格式在这里确实有点奇怪,但我在 extra-hosts 下的键似乎以相反的顺序添加到 /etc/hosts 中,所以 - 127.0.0.1 my.domain
  • 请参阅下面的评论:本地 /etc/hosts 文件。这肯定会有点混乱! :c)
  • 您不应该将/etc/hosts 包含在一个卷中吗?
  • @Robert 是的,它看起来更像是一个本地网络问题,或者它完全忽略 /etc/hosts 真的很奇怪。我犹豫是否建议您关闭并重新打开您的机器?

标签: php docker docker-compose apache2 hosts


【解决方案1】:

解决了!

HERE 你可以找到一个名为 octesian 的用户发布的解决方案。我只是简单地看了整个事情,但这似乎是一些奇怪的无证码头怪癖。我确实建议深入了解 Docker 的网络文档。

看起来我必须在 apache2 服务的构建部分添加 network: host 所以:

apache2:
    build:
      network: host
      context: ./apache2/
      dockerfile: Dockerfile
    container_name: apache2
    image: httpd:2.4.39-alpine
    ports:
      - 8080:80

我敢打赌,它并不完美,当我决定引入更多网站时会导致不同的问题,但就目前而言,这是一个成功且有效的解决方案。

【讨论】:

    猜你喜欢
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多