因为两个容器需要同时挂载宿主上的/var/www/html目录
docker run -d -v /var/www/html/:/var/www/html --name cphp -p 9000:9000 image_php_01
docker run -d -v /var/www/html/:/var/www/html --name cnginx -p 6001:80 image_nginx
nginx容器中的配置内容如下
\etc\nginx\sites-available\default
server {
listen 80; # 监听80端口
server_name localhost; # 可替换为实际域名
# 网站根目录(需与PHP容器中文件路径一致,建议通过卷共享)
root /var/www/html;
index index.php index.html index.htm;
# 处理静态文件(Nginx直接返回)
location / {
try_files $uri $uri/ =404;
}
# 处理PHP文件(转发到PHP-FPM)
location ~ \.php$ {
# 转发到PHP容器的PHP-FPM(IP:端口)要确保正确,实验测试过程中踩坑了
fastcgi_pass 172.17.0.3:9000;
fastcgi_index index.php;
# 关键:PHP脚本在容器中的绝对路径(必须与PHP容器中路径一致)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; # 引入默认FastCGI参数
}
}
测试的时候我是从cat /var/log/nginx/error.log知道我php容器ip地址填错了的
php容器中的listen需要修改
原设置是:(测试过程中一直想用#进行注销,结果容器无法正常启动,正确的做法是要在行头加入;号)
listen = /run/php/php7.4-fpm.sock
需要改成:
listen = 0.0.0.0:9000
另外需要在nginx容器中修改/var/www/html路径的权限:
chown -R www-data:www-data /var/www/html
root@4f931fcb7db9:/# chmod -R 755 /var/www/html