问题描述
设置如下:
- 有一台运行在 VMware(vSphere客户端)中的 Ubuntu 20.04.2 LTS 机器。
- 在这台机器上,有一个使用 Wodby Docker4Drupal 运行的本地 Drupal 网站(详见 https://github.com/wodby/docker4drupal)。
- 该网站可以在 Ubuntu 机器上通过 http://drupal.localhost:8000 访问。
- Ubuntu 机器的 IP 是 192.168.10.100,在同一局域网上的 Windows 机器可以 ping 到该 IP(Windows 机器的 IP 地址是 192.168.10.97)。
用户想要在同一局域网内的浏览器中直接访问这个 Drupal 网站,例如他的 Windows 机器上的浏览器。但是,他在尝试访问 http://192.168.10.100:8000 时收到 “404 page not found” 的错误,端口 80 则显示 “ERR_CONNECTION_REFUSED”。他还提到在 Ubuntu 虚拟机中访问 http://0.0.0.0:8000、http://127.0.0.1:8000 或 http://localhost:8000 时同样获得 “404 page not found”,只有在项目中配置的主机名(http://drupal.localhost:8000)能够解析到 Drupal 网站。
用户还提供了他所使用的 docker-compose.yml
文件。
解决方案
用户的问题可能是由于 Traefik 的设置问题导致的。要在同一局域网内访问运行在 VMware 中的 Docker 环境中的 Drupal 网站,可以采取以下步骤:
方案1
请注意以下操作可能涉及到版本差异,操作前建议做好备份。
首先,检查 Ubuntu 防火墙的状态,可以运行以下命令查看:
bash
sudo ufw status
如果返回 “Status: inactive” 表示防火墙处于未激活状态。如果防火墙处于激活状态并且没有允许来自任何地方的 TCP 8000 端口连接,请运行以下命令开放该端口:
bash
sudo ufw allow from any to any port 8000 proto tcp确保在局域网中的其他设备能够访问 Ubuntu 机器的 IP(192.168.10.100)。
方案2(最佳解决方案)
用户最终发现问题在 Traefik 的设置中,需要添加一个额外的路由规则来允许局域网中的设备访问。
打开
docker-compose.yml
文件,找到 nginx 服务的配置段,可能类似于以下内容:
“`yaml
nginx:
image: wodby/nginx:$NGINX_TAG
container_name: “${PROJECT_NAME}_nginx”
depends_on:- php
environment:
# … 其他配置 …
volumes:
# … 其他卷 …
labels: - “traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(
${PROJECT_BASE_URL}
)”
“`
- php
在 nginx 服务的配置段中添加一行路由规则,允许局域网中的设备通过 IP(192.168.10.100)访问:
“`yaml
labels:- “traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(
${PROJECT_BASE_URL}
)” - “traefik.http.routers.${PROJECT_NAME}_nginx_lan.rule=Host(
192.168.10.100
)”
“`
- “traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(
保存并关闭
docker-compose.yml
文件。重新启动 Docker Compose 服务,以应用新的配置:
bash
docker-compose up -d
现在,用户应该可以从局域网中的其他设备访问 Drupal 网站,通过 http://192.168.10.100:8000 可以访问到 Drupal 网站。
请注意,这里的 ${PROJECT_BASE_URL}
和 ${PROJECT_NAME}
可能是在用户的 .env
文件中配置的,分别对应着 drupal.localhost
和 drupal
。如果你的配置不同,请相应地调整路由规则中的主机名部分。
这样,用户可以从局域网中的任何设备访问 Drupal 网站,提供了一个解决方案来实现他的需求。