php容器访问不到80端口是因为apache默认监听127.0.0.1:80,而非0.0.0.0:80;需通过-p 8080:80映射并验证监听地址为0.0.0.0:80。

docker run 启动 PHP 容器时为什么访问不到 80 端口?
默认的 php:apache 镜像虽然内置了 Apache,但容器内服务只监听 localhost:80(即 127.0.0.1),而 Docker 容器网络中,localhost 指向容器自身,外部宿主机无法通过 localhost:8080 映射访问——真正要暴露的是容器的 0.0.0.0:80。
实操建议:
- 启动时加
-p 8080:80,并确认容器内 Apache 监听的是0.0.0.0:80(可通过docker exec -it [container] ss -tlnp | grep :80验证) - 避免用
php -S内置服务器(如php -S 0.0.0.0:8000),它不支持 .htaccess、静态文件自动处理,开发体验差 - 若用自定义
httpd.conf,检查Listen指令是否为Listen 80(而非Listen 127.0.0.1:80)
PHP 扩展(如 pdo_mysql、gd)在容器里始终 not found?
Docker 官方 php 镜像默认不启用多数扩展,extension=gd.so 这类配置写进 php.ini 也没用——模块文件根本没安装。
实操建议:
- 优先使用带扩展的标签,例如
php:8.3-apache后追加安装命令:docker run -it --rm php:8.3-apache docker-php-ext-install pdo_mysql gd zip - 若需编译安装(如
redis),必须先pecl install redis,再docker-php-ext-enable redis - 注意:每次
docker-php-ext-install都会重建php.ini,已有配置可能被覆盖;建议用echo "extension=xxx.so" > /usr/local/etc/php/conf.d/zzz-ext.ini方式追加
如何让宿主机代码实时生效,又不破坏容器内 Apache 权限?
直接 -v ./src:/var/www/html 挂载后,Apache 进程(www-data 用户)常因权限不足无法写日志、上传文件或执行 composer install。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
实操建议:
- 启动前查宿主机用户 UID:
id -u,然后用--user $(id -u):$(id -g)启动容器,让 www-data 组映射到宿主机当前用户 - 更稳妥的做法是改容器内 Apache 用户 UID:
RUN usermod -u 1001 www-data && groupmod -g 1001 www-data(构建镜像时) - 避免挂载整个
/var/www/html到空目录——Composer 的vendor/和缓存文件会被覆盖;建议只挂载./src:/var/www/html,用composer install在容器内运行一次生成vendor
MySQL 连接不上:host 该填 localhost 还是 docker network 名?
在容器内连 MySQL,填 localhost 是错的——它会走 Unix socket,而 MySQL 容器没暴露 socket 文件;必须用 Docker 自定义网络中的服务名。
实操建议:
- 别用
docker run单独启 MySQL,改用docker network create phpdev+docker run --network phpdev --name mysql8 --env MYSQL_ROOT_PASSWORD=123 mysql:8 - PHP 容器启动时也加入同一网络:
docker run --network phpdev -p 8080:80 -v $(pwd)/src:/var/www/html php:8.3-apache - PHP 代码里 DSN 改成
mysql:host=mysql8;dbname=test(mysql8是容器名,Docker DNS 自动解析) - 如果硬要用
127.0.0.1,得额外暴露 MySQL 宿主机端口(-p 3306:3306),但存在端口冲突和权限绕过风险,不推荐
最易忽略的一点:PHP 容器时间与宿主机不同步会导致 Composer 安装失败、JWT 过期校验异常。启动时加 -v /etc/localtime:/etc/localtime:ro 或设环境变量 TZ=Asia/Shanghai。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










