在容器之间共享文件卷引发权限错误

问题描述

我有以下设置:

  • (Symfony) PHP 8.0 后端
  • (Angular12) Javascript 前端

一个表单中,我将一个 Base64 编码的文件发送到操作和保存文件的后端。在前端,我想显示保存的文件

我不确定在不发布我的 Dockerfiles 和 docker-compose 的情况下会显示设置

后端图片

FROM PHP:8.0-fpm

...

# Create Folder for Uploaded Data
RUN mkdir -p /usr/src/upload
copY --chown=1000:1000 apps/frontend/src/assets/images/upload /usr/src/upload

workdir /usr/src/app

# copy the source to the Container
copY --chown=1000:1000 apps/backend /usr/src/app

...

前端图片

FROM node:12.19 as build

...

# set working directory
workdir /app

...

# add app
copY apps/frontend /app

...

# base image
FROM Nginx:1.19.6-alpine

# copy artifact build from the 'build environment'
copY --from=build /app/dist /usr/share/Nginx/html

RUN chown Nginx:Nginx /usr/share/Nginx/html/*

在容器中,我拥有 ls -l /usr/src

的这些权限
drwxrwxrwx 1 root root     4096 Jun 15 15:30 app
-rw-r--r-- 1 root root 10755796 Mar  6 03:06 PHP.tar.xz
-rw-r--r-- 1 root root      858 Mar  6 03:06 PHP.tar.xz.asc
drwxr-xr-x 1 root root     4096 Jun 15 15:30 upload

我的 Docker Compose 为了能够从前端访问文件,我将后端文件夹挂载到前端资产。但是,我认为错误发生在此之前:

version: '3.8'

services:
  ...
  Nginx:
    image: Nginx:1.19.6-alpine
    restart: on-failure
    volumes:
      - './apps/backend/public/:/usr/src/app'
      - './apps/frontend/src/assets/images/upload/:/usr/src/upload'
      - './docker/Nginx/backend.conf:/etc/Nginx/conf.d/default.conf:ro'
    ports:
      - 8002:80
    depends_on:
      - PHP
  PHP:
    build:
      context: .
      dockerfile: docker/PHP/Dockerfile
    volumes:
      - './apps/backend/:/usr/src/app'
    restart: on-failure
    user: 1000:1000
    env_file:
      - .env.docker
networks:
  default:

在我的后端我现在这样做(首先创建文件夹以保存文件):

$monthYear = new DateTime();
$path = $folder . '/' . $monthYear->format('Y-m');
if (!$this->filesystem->exists($path)) {
   $this->filesystem->mkdir($path);
}

这给了我

未能创建“/usr/src/upload/2021-06”:mkdir():权限被拒绝

我哪里错了?任何提示高度赞赏!

// 编辑 随着

RUN mkdir -p /usr/src/upload
RUN chmod -R 777 /usr/src/upload

权限错误消失,图像被上传。但是,它们不在本地 Volume 中?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)