将php网站部署到docker容器可以实现开发、测试、生产环境的一致性,避免环境差异导致的问题,同时便于后续的迁移和扩容。下面详细介绍完整的部署流程。

部署前准备
首先需要确保本地已经安装docker和docker-compose,然后准备好要部署的php网站项目源码,假设项目目录结构如下:
- project/
- ├── src/ # php网站源码目录
- ├── nginx/ # nginx配置文件目录
- ├── Dockerfile # php服务镜像构建文件
- └── docker-compose.yml # 容器编排文件
编写php服务Dockerfile
php网站运行需要php-fpm服务,我们可以基于官方php镜像构建自定义镜像,安装需要的扩展。以下是Dockerfile内容:
# 使用官方php-fpm镜像作为基础镜像 FROM php:8.2-fpm # 设置工作目录 WORKDIR /var/www/html # 安装需要的php扩展,比如pdo_mysql RUN docker-php-ext-install pdo_mysql # 将本地项目源码复制到容器工作目录 COPY ./src /var/www/html # 暴露9000端口,php-fpm默认端口 EXPOSE 9000
配置nginx服务
php-fpm需要和nginx配合才能处理http请求,我们需要准备nginx的配置文件,假设文件名为nginx/default.conf,内容如下:
server {
listen 80;
server_name localhost;
# 网站根目录,对应php容器中的目录
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 处理php请求,转发到php-fpm服务
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}编写docker-compose编排文件
使用docker-compose可以同时管理php-fpm和nginx两个容器,实现容器间的网络通信。docker-compose.yml内容如下:
version: '3'
services:
# php-fpm服务
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./src:/var/www/html # 挂载源码目录,方便本地修改同步到容器
networks:
- php-net
# nginx服务
nginx:
image: nginx:alpine
ports:
- "8080:80" # 将本地8080端口映射到容器80端口
volumes:
- ./src:/var/www/html # 挂载源码目录
- ./nginx:/etc/nginx/conf.d # 挂载nginx配置目录
depends_on:
- php
networks:
- php-net
# 自定义网络,让两个容器可以互相访问
networks:
php-net:
driver: bridge启动并验证部署
在docker-compose.yml所在目录执行以下命令启动容器:
# 构建镜像并启动容器 docker-compose up -d # 查看容器运行状态 docker-compose ps
容器启动后,可以在本地浏览器访问http://127.0.0.1:8080,如果看到php网站的首页,说明部署成功。如果访问失败,可以通过以下命令查看容器日志排查问题:
# 查看php容器日志 docker-compose logs php # 查看nginx容器日志 docker-compose logs nginx
常见问题解决
php文件无法解析
检查nginx配置中的fastcgi_pass是否指向正确的php容器名和端口,同时确认SCRIPT_FILENAME参数配置正确,路径要和php容器中的源码路径一致。
数据库连接失败
如果php网站需要连接数据库,可以在docker-compose中新增mysql服务,然后在php代码中通过服务名连接数据库,比如数据库服务名为mysql,连接地址就写mysql即可。
权限问题
如果容器中没有权限读写文件,可以在Dockerfile中添加用户权限配置,或者调整本地项目目录的读写权限。
phpdockerphp-fpmnginxDockerfile修改时间:2026-06-07 01:38:34