Docker apache2 /etc/hosts 忽略仅适用于 localhost

Docker apache2 /etc/hosts ignored works only with localhost

我已经在单独的容器中成功设置了 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/
    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 - 没有帮助。

解决了!

HERE 您可以找到名为 octesian 的用户发布的解决方案。我只是简单地看了整件事,但它似乎是一些奇怪的未记录的 docker 怪癖。我确实建议深入研究 Docker 的网络文档。

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

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

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