这是我的设置:
我有一台在 VMware(vSphere 客户端)中运行的 Ubuntu 20.04.2 LTS 机器。
在这台机器上,我使用 Wodby Docker4Drupal 在 Docker 中运行一个本地 Drupal 网站,https://github.com/wodby/docker4drupal
该网站可以在 Ubuntu 机器上访问http://drupal.localhost:8000。
Ubuntu 计算机的 IP 为192.168.10.100我可以从位于同一 LAN 上的本地 Windows 计算机 ping 通它(Windows 计算机 IP 地址是 192.168.10.97)。
有没有什么方法可以让我直接从位于同一 LAN 的计算机(即我的 Windows 机器)上的浏览器访问 Drupal 网站?
我曾尝试访问http://192.168.10.100:8000但我收到了一条404 page not found
消息。在端口上80
我收到了ERR_CONNECTION_REFUSED
。有什么想法吗?
我还要提一下,在 Ubuntu VM 上,我还可以相同 404 page not found
如果我尝试达到http://0.0.0.0:8000或者http://127.0.0.1:8000或 http://localhost:8000。只有项目内配置的主机名才能解析为 Drupal 网站(http://drupal.localhost:8000)。
这是docker-compose.yml
我正在使用的。
version: "3.7"
services:
mariadb:
image: wodby/mariadb:$MARIADB_TAG
container_name: "${PROJECT_NAME}_mariadb"
stop_grace_period: 30s
environment:
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
MYSQL_DATABASE: $DB_NAME
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
volumes:
- d4d-db-data:/var/lib/mysql # Use bind mount
php:
image: wodby/drupal-php:$PHP_TAG
container_name: "${PROJECT_NAME}_php"
environment:
PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
volumes:
- ./web:/var/www/html:cached
crond:
image: wodby/drupal-php:$PHP_TAG
container_name: "${PROJECT_NAME}_crond"
environment:
CRONTAB: "0 * * * * drush -r /var/www/html/web cron"
command: sudo -E LD_PRELOAD=/usr/lib/preloadable_libiconv.so crond -f -d 0
volumes:
- ./web:/var/www/html:cached
nginx:
image: wodby/nginx:$NGINX_TAG
container_name: "${PROJECT_NAME}_nginx"
depends_on:
- php
environment:
NGINX_STATIC_OPEN_FILE_CACHE: "off"
NGINX_ERROR_LOG_LEVEL: debug
NGINX_BACKEND_HOST: php
NGINX_SERVER_ROOT: /var/www/html/web
NGINX_VHOST_PRESET: $NGINX_VHOST_PRESET
# NGINX_DRUPAL_FILE_PROXY_URL: http://example.com
volumes:
- ./web:/var/www/html:cached
labels:
- "traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)"
mailhog:
image: mailhog/mailhog
container_name: "${PROJECT_NAME}_mailhog"
labels:
- "traefik.http.services.${PROJECT_NAME}_mailhog.loadbalancer.server.port=8025"
- "traefik.http.routers.${PROJECT_NAME}_mailhog.rule=Host(`mailhog.${PROJECT_BASE_URL}`)"
traefik:
image: traefik:v2.0
container_name: "${PROJECT_NAME}_traefik"
command: --api.insecure=true --providers.docker
ports:
- '8000:80'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
volumes:
d4d-db-data:
答案1
事实证明这只是 Traefik 中的一个设置。我必须在我的 nginx 容器中添加第二条路由器 http 规则docker-compose.yml
:
- "traefik.http.routers.${PROJECT_NAME}_nginx_lan.rule=Host(`192.168.10.100`)"
因此完整的 nginx 部分现在看起来像这样:
nginx:
image: wodby/nginx:$NGINX_TAG
container_name: "${PROJECT_NAME}_nginx"
depends_on:
- php
environment:
NGINX_STATIC_OPEN_FILE_CACHE: "off"
NGINX_ERROR_LOG_LEVEL: debug
NGINX_BACKEND_HOST: php
NGINX_SERVER_ROOT: /var/www/html/web
NGINX_VHOST_PRESET: $NGINX_VHOST_PRESET
# NGINX_DRUPAL_FILE_PROXY_URL: http://example.com
volumes:
- ./web:/var/www/html:cached
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`)"
一切正常。我现在可以访问我的 Drupal 网站http://192.168.10.100:8000与同一 LAN 上的任何其他设备。
在我的例子中,PROJECT_BASE_URL
和PROJECT_NAME
配置在一个.env
文件中,分别对应于drupal.localhost
和drupal
。
感谢@muru 的帮助!