求助:Docker Compose部署的WordPress无法通过192.168.0.x IPv4访问
背景
各位社区成员好!
我使用Docker Compose在本地环境搭建了一个小型WordPress应用。
我尝试配置docker-compose.yml,让应用可通过192.168.0.x这类外部IPv4地址访问,但目前仅能通过以下方式访问:
- http://localhost
- http://127.0.0.1
- http://0.0.0.0
疑问
是否可以通过无线局域网(WLAN)的外部IP访问该应用?
例如:http://192.168.0.13 或 http://192.168.65.10
以下是我的docker-compose.yml配置文件(配置后WLAN IPv4地址192.168.65.10无法访问):
version: '3' services: db: image: mysql:latest container_name: wordpress-database restart: always volumes: - ./db-data:/var/lib/mysql ports: - 3306:3306 environment: MYSQL_DATABASE: wordpress-database MYSQL_USER: wordpress-user MYSQL_PASSWORD: wordpress-password MYSQL_ROOT_PASSWORD: root networks: internal: ipv4_address: 172.30.9.5 lan: ipv4_address: 192.168.65.12 pma: image: phpmyadmin/phpmyadmin container_name: wordpress-phpmyadmin restart: always environment: PMA_HOST: db # PMA_PORT: 3306 MYSQL_ROOT_PASSWORD: root-database ports: - 8080:80 depends_on: - db networks: internal: ipv4_address: 172.30.9.4 lan: ipv4_address: 192.168.65.11 wp: image: wordpress:latest container_name: wordpress-app restart: always volumes: - ./wp-app:/var/www/html ports: - 80:80 expose: - 80 environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_TABLE_PREFIX: wp_ WORDPRESS_DB_NAME: wordpress-database WORDPRESS_DB_USER: wordpress-user WORDPRESS_DB_PASSWORD: wordpress-password depends_on: - db - pma dns: - 127.0.0.1 - 1.1.1.1 networks: internal: ipv4_address: 172.30.9.3 lan: ipv4_address: 192.168.65.10 networks: internal: ipam: config: - subnet: 172.30.9.0/29 lan: name: lan driver: ipvlan driver_opts: parent: eth0.10 ipvlan_mode: l2 ipam: config: - subnet: "192.168.65.0/24" gateway: "192.168.65.1"
解决方案
1. 修正ipvlan网络的父接口配置
你当前配置的parent: eth0.10是VLAN子接口,如果你的WLAN并没有使用该VLAN(比如无线网卡是wlan0),这个配置会失效:
- 用
ip link show命令查看主机实际的无线网卡名称(通常是wlan0) - 将
lan网络的parent字段替换为实际无线网卡名称
2. 移除冲突的端口映射
wp服务同时配置了ports: -80:80和ipvlan固定IP,两种方式冲突。如果用ipvlan让容器直接获取局域网IP,无需端口映射,删掉ports: -80:80这一行。
3. 配置WordPress站点地址
即使容器能被局域网访问,WordPress默认的localhost地址会导致跳转异常,需要在wp服务的环境变量中添加:
WORDPRESS_SITE_URL: http://192.168.65.10 WORDPRESS_HOME: http://192.168.65.10
4. 检查防火墙与权限
- 主机防火墙需放行80端口,Linux下可执行
sudo ufw allow 80/tcp - 确保启动容器时使用管理员权限(Linux下加sudo)
修正后的docker-compose.yml示例
version: '3' services: db: image: mysql:latest container_name: wordpress-database restart: always volumes: - ./db-data:/var/lib/mysql environment: MYSQL_DATABASE: wordpress-database MYSQL_USER: wordpress-user MYSQL_PASSWORD: wordpress-password MYSQL_ROOT_PASSWORD: root networks: internal: ipv4_address: 172.30.9.5 lan: ipv4_address: 192.168.65.12 pma: image: phpmyadmin/phpmyadmin container_name: wordpress-phpmyadmin restart: always environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: root-database depends_on: - db networks: internal: ipv4_address: 172.30.9.4 lan: ipv4_address: 192.168.65.11 wp: image: wordpress:latest container_name: wordpress-app restart: always volumes: - ./wp-app:/var/www/html environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_TABLE_PREFIX: wp_ WORDPRESS_DB_NAME: wordpress-database WORDPRESS_DB_USER: wordpress-user WORDPRESS_DB_PASSWORD: wordpress-password WORDPRESS_SITE_URL: http://192.168.65.10 WORDPRESS_HOME: http://192.168.65.10 depends_on: - db - pma networks: internal: ipv4_address: 172.30.9.3 lan: ipv4_address: 192.168.65.10 networks: internal: ipam: config: - subnet: 172.30.9.0/29 lan: name: lan driver: ipvlan driver_opts: parent: wlan0 # 替换为你的实际无线网卡名称 ipvlan_mode: l2 ipam: config: - subnet: "192.168.65.0/24" gateway: "192.168.65.1"
验证步骤
- 重启容器:
docker-compose down && docker-compose up -d - 在局域网内其他设备访问
http://192.168.65.10,确认是否能正常打开WordPress页面。
内容的提问来源于stack exchange,提问作者jonathasborges1
相关产品推荐
相关产品推荐

