php应用docker化卡点在于配置细节:nginx与php-fpm需通过服务名(如fastcgi_pass php:9000)通信并共用自定义网络;扩展安装须注意依赖、顺序及启用命令;php.ini应增量配置而非全量覆盖;alpine连mysql需补openssl或禁用ssl;uid/gid不一致易致vendor权限问题。

php 应用 Docker 化不是“写个 Dockerfile 就能跑”,真正卡住人的,是容器一启动就 502 Bad Gateway、Class not found、或者连不上数据库——这些问题几乎都出在配置细节上,而不是语法或逻辑。
docker-compose.yml 里 nginx 和 php-fpm 怎么配才不 502
根本原因:容器间 localhost 不互通,nginx 容器里写 fastcgi_pass localhost:9000 必然失败。
正确做法是用服务名通信,并确保网络一致:
- 在
docker-compose.yml中给 PHP 服务起名(比如php),Nginx 服务里写fastcgi_pass php:9000 - 所有服务必须声明同一自定义网络(如
networks: [app-network]),不能依赖默认bridge - 如果用
php:8.2-fpm镜像,别漏掉EXPOSE 9000;若用 socket 方式,则需挂载相同路径 + 设置权限(如www-data用户组可读)
docker-php-ext-install 装扩展总失败怎么办
常见错误现象:extension=redis.so 写进 php.ini 但 phpinfo() 不显示,容器也不报错,只是请求直接 500 或拒绝连接。
关键点不在“装没装”,而在“装得对不对”:
-
pdo_mysql必须在pdo之后安装:docker-php-ext-install pdo pdo_mysql,顺序颠倒会加载失败 -
opcache编译进 PHP 后默认不启用,必须显式执行docker-php-ext-enable opcache -
redis是 PECL 扩展,不能用docker-php-ext-install redis,得先pecl install redis,再docker-php-ext-enable redis - 装扩展前记得装系统依赖,比如
apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev(gd 扩展必需)
php.ini 配置覆盖后 date.timezone 没了怎么恢复
直接 COPY php.ini /usr/local/etc/php/ 全量替换,会丢掉镜像自带的默认配置项(如 upload_max_filesize、max_execution_time、date.timezone),导致上传失败或时区错误。
推荐做法是增量追加,不碰原始配置:
- 用
RUN echo "date.timezone = Asia/Shanghai" >> /usr/local/etc/php/conf.d/timezone.ini - 用
RUN echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini - 所有自定义配置都放
/usr/local/etc/php/conf.d/下的独立.ini文件,PHP 启动时自动按字母序加载
alpine 镜像里连 MySQL 报 SSL connection error 怎么办
现象:mysqli_connect(): SSL connection error 或 PDO::__construct(): SSL connection error,但代码和配置都没问题。
根因:Alpine 默认不带 libssl1.1,而 MySQL 8.0+ 默认强制 SSL 连接。
解决路径有两条,选其一即可:
- 在 Alpine 镜像中补全 SSL 库:
apk add --no-cache openssl(注意不是libssl1.1,Alpine 用的是openssl包) - 改 MySQL 连接参数,显式禁用 SSL:
new PDO("mysql:host=db;dbname=test;charset=utf8mb4", $user, $pass, [PDO::MYSQL_ATTR_SSL_MODE => PDO::SSL_NONE])
composer install 在容器内运行后生成的 vendor 目录,宿主机编辑器可能无法写入。这事不报错,但会拖慢整个开发流。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











