在局域网中访问运行在VMware中的Docker环境中的Drupal网站

69次阅读
没有评论

问题描述

设置如下:

  • 有一台运行在 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

请注意以下操作可能涉及到版本差异,操作前建议做好备份。

  1. 首先,检查 Ubuntu 防火墙的状态,可以运行以下命令查看:
    bash
    sudo ufw status

    如果返回 “Status: inactive” 表示防火墙处于未激活状态。

  2. 如果防火墙处于激活状态并且没有允许来自任何地方的 TCP 8000 端口连接,请运行以下命令开放该端口:
    bash
    sudo ufw allow from any to any port 8000 proto tcp

  3. 确保在局域网中的其他设备能够访问 Ubuntu 机器的 IP(192.168.10.100)。

方案2(最佳解决方案)

用户最终发现问题在 Traefik 的设置中,需要添加一个额外的路由规则来允许局域网中的设备访问。

  1. 打开 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})”
      “`
  2. 在 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)”
      “`
  3. 保存并关闭 docker-compose.yml 文件。

  4. 重新启动 Docker Compose 服务,以应用新的配置:
    bash
    docker-compose up -d

现在,用户应该可以从局域网中的其他设备访问 Drupal 网站,通过 http://192.168.10.100:8000 可以访问到 Drupal 网站。

请注意,这里的 ${PROJECT_BASE_URL}${PROJECT_NAME} 可能是在用户的 .env 文件中配置的,分别对应着 drupal.localhostdrupal。如果你的配置不同,请相应地调整路由规则中的主机名部分。

这样,用户可以从局域网中的任何设备访问 Drupal 网站,提供了一个解决方案来实现他的需求。

正文完