docker-compose 配置开发环境遇到了些 问题 有没有大神指点下

这是docker-compose.yml

services:
  redis:
    image: redis:latest
    environment:
      - REDIS_PASSWORD=${REDIS_PASSWORD}
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - ./data/redis:/data
    networks:
      - backend
  nginx:
    image: nginx:latest
    volumes:
      - ./code/:/var/www/html
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    ports:
      - "80:80"
    networks:
      - backend
    depends_on:
      - php
  php:
    build:
      context: ./php
      dockerfile: Dockerfile
    volumes:
      - ./code:/var/www/html
    environment:
      - PHP_MEMORY_LIMIT=256M
      - PHP_MAX_EXECUTION_TIME=300
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - OPCACHE_ENABLE=1
    user:

    networks:
      - backend
    depends_on:
      - redis
      - mysql
    deploy:
      replicas: 1
  php-keep:
    build:
      context: ./php
      dockerfile: DcokerfileQueue
    volumes:
      - ./code:/var/www/html
      - ./supervisord.conf:/etc/supervisord.conf
    environment:
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - PHP_MEMORY_LIMIT=256M
      - PHP_MAX_EXECUTION_TIME=300
    networks:
      - backend
    depends_on:
      - redis
  mysql:
    image: mysql:5.7.16
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    ports:
      - "3306:3306"
    volumes:
      - ./data/mysql:/var/lib/mysql
    networks:
      - backend
networks:
  backend:

这个是nginx配置

user nginx;
worker_processes auto;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {

    server {
        listen 80;
        server_name localhost;
        root /var/www/html;  # 确保这里是正确的根目录
        index index.php;

        # 处理所有请求
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        # 处理 PHP 请求
        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_pass php:9000;  # 确保 php 容器名正确
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
        location ~ /\.ht {
            deny all;
        }
    }
}

现在出现的问题是

如果我配置 nginx root /var/www/html;

可以正常访问

配置成 nginx root /var/www/html/public;

就会报错

ERROR: Unable to open primary script: /var/www/html/public/index.php (Operation not permitted)

/var/www/html/index.php
/var/www/html/public/index.php 这两个权限是相同的

附:两个文件权限

-rwxrwxrwx  1 www-data www-data     28 Nov 12 07:57 index.php  #可以执行的权限

-rwxrwxrwx 1 www-data www-data 0 Nov 12 07:58 index.php #报错的权限
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 13

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

4个月前 评论
保安 (楼主) 4个月前

要注意 html 文件夹和里面文件的权限

4个月前 评论
保安 (楼主) 4个月前
 volumes:
      - ./code/:/var/www/html       <---------- nginx 容器有斜杠 /
      - ./code:/var/www/html        <---------- php 容器无斜杠

猜是这里?把细节做好再排查一下,错误提示很清楚了

4个月前 评论
保安 (楼主) 4个月前

挂载后重新设置一下文件权限

4个月前 评论

检查一下文件所属用户是不是一样的

4个月前 评论

用supervisor守护php-fpm进程试试

4个月前 评论
NightCp (作者) 4个月前
保安 (楼主) 4个月前

进nginx容器内看下项目路径

4个月前 评论

谢谢各位 应该是权限的问题。我把public 目录重新copy了一个然后改名 好了

4个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!