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
我敢打赌它并不完美,当我决定引入更多网站时会导致不同的问题,但就目前而言,它是一个成功且有效的解决方案。
我已经在单独的容器中成功设置了 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
我敢打赌它并不完美,当我决定引入更多网站时会导致不同的问题,但就目前而言,它是一个成功且有效的解决方案。