在使用 docker compose 部署 lemp (linux, nginx, mysql, php) 环境时,访问 php 文件出现 “primary script unknown” 错误?本文将分析问题根源并提供解决方案。

错误原因在于 Docker Compose 配置文件中,错误地重复挂载了宿主机的 /opt/html/ 目录。 Nginx 容器的 /etc/nginx/conf.d/default.conf 文件中,location 配置存在冲突:
<code class="nginx">location / {
root /usr/share/nginx/html/wordpress;
index index.php index.html;
}
location ~\.php$ {
root /usr/share/nginx/html/;
fastcgi_pass php-fpm01:9000;
fastcgi_index index.php;
fastcgi_param script_filename /var/www/html$fastcgi_script_name;
include fastcgi_params;
}</code>由于 /opt/html/ 被同时挂载到 /usr/share/nginx/html/ 和 /usr/share/nginx/html/wordpress/ ,当访问如 /wp-admin/install.php 时,Nginx 会在两个位置同时查找,而 wordpress 目录位于 /usr/share/nginx/html/wordpress/ ,导致找不到 PHP 脚本,从而报错。
解决方案:
移除 Nginx 容器中冗余的挂载配置。 在 docker-compose.yml 文件中,删除 Nginx 服务的以下配置:
<code class="yaml">- /opt/html/:/usr/share/nginx/html</code>
修改后的 docker-compose.yml 文件示例:
<code class="yaml">services:
web01:
container_name: nginx01
depends_on:
- "db01"
- "php01"
image: nginx:stable
ports:
- "8080:80"
volumes:
- /opt/conf/nginx/:/etc/nginx
networks:
- lnmp
db01:
container_name: mysql01
image: mysql:5.7
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
env_file:
- env.mysql
networks:
- lnmp
php01:
container_name: php-fpm01
image: vphp:7.3-fpm
ports:
- "9000:9000"
volumes:
- /opt/conf/php-fpm/php-fpm.d:/usr/local/etc/php-fpm.d
- /opt/html/:/var/www/html
networks:
- lnmp
privileged: true
volumes:
db_data:
external: false
networks:
lnmp:
external: false</code>执行 docker-compose up -d 命令重新部署 LEMP 环境,即可解决 “primary script unknown” 错误。 确保 /opt/html/ 只在 PHP-FPM 容器中被正确挂载。 如果问题仍然存在,请检查 Nginx 配置文件中的 root 指令是否正确指向你的项目根目录。
以上就是Docker Compose部署LEMP环境报错“Primary script unknown”是什么原因?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号