Docker部署的Codeigniter应用无法通过本地IP访问
我用docker-compose搭建了Codeigniter/PHP应用,通过localhost:8893或127.0.0.1:8893可正常访问,但使用本地IP192.168.100.96:8893访问时,页面持续加载无响应。
docker-compose.yaml配置
version: '3.7' services: test-webserver: image: thecodingmachine/php:8.0-v4-apache-node16 container_name: test-webserver working_dir: /var/www/html environment: # PHP_EXTENSIONS: apcu pdo_mysql opcache redis zip gd yaml exif xdebug PHP_EXTENSIONS: opcache redis zip gd yaml exif xdebug PHP_EXTENSION_GD: 1 PHP_EXTENSION_MYSQLI: 1 APACHE_DOCUMENT_ROOT: /var/www/html/ APACHE_RUN_GROUP: www-data # use www-data user in container.. which is also used on most webservers for deployer APACHE_RUN_USER: www-data PHP_EXTENSION_XDEBUG: 1 depends_on: - test-mariadb volumes: - ./:/var/www/html - ~/.ssh:/root/.ssh stdin_open: true tty: true expose: - "8893" ports: - "8893:80" networks: - test.network test-mariadb: container_name: test-mariadb image: mariadb:10.3.36 networks: - test.network restart: always environment: - MARIADB_ROOT_PASSWORD=test123 volumes: - ../mariadb:/var/lib/mysql expose: - "40000" ports: - "40000:3306" test-phpmyadmin: container_name: test-phpmyadmin image: phpmyadmin/phpmyadmin:latest networks: - test.network restart: always environment: - PMA_HOST=test-mariadb - PMA_PORT=3306 - PMA_USER=root - PMA_PASSWORD=test123 - UPLOAD_LIMIT=2048M expose: - "40001" ports: - "40001:80" networks: test.network: driver: bridge name: test.network external: true
环境变量配置
APP_DB_HOSTNAME=test-mariadb APP_DB_USERNAME=root APP_DB_PASSWORD=test123 APP_DB_NAME=my_test_db APP_DB_PORT=3306 APP_DB_PREFIX=tbl
排查方向
检查防火墙/安全组规则
确认本地机器的防火墙(Windows防火墙、Linux ufw/iptables等)允许8893端口的入站连接。确保朋友设备和你的机器在同一局域网内,端口未被拦截。修正Apache监听地址
容器内Apache默认可能仅绑定127.0.0.1,导致只能本地回环访问。在test-webserver服务的环境变量中添加APACHE_LISTEN_ADDRESS=0.0.0.0,让Apache监听所有网卡。调整Codeigniter base_url配置
查看Codeigniter的config.php,如果$config['base_url']被固定设置为localhost或127.0.0.1,会导致外部访问异常。可修改为动态获取:$config['base_url'] = 'http://' . $_SERVER['HTTP_HOST'] . '/';或直接设置为
http://192.168.100.96:8893/(IP固定时)。验证宿主机端口监听状态
在宿主机执行netstat -tulpn | grep 8893,确认端口是否监听在0.0.0.0:8893,而非仅127.0.0.1:8893。测试局域网连通性
让朋友在同一局域网内ping你的本地IP192.168.100.96,确认网络可达。若ping不通,先排查路由器设置、设备网段一致性等局域网基础问题。
内容的提问来源于stack exchange,提问作者Faizan Anwer Ali

