无法更改目录权限

时间:2021-04-13 15:20:08

标签: docker docker-compose

我正在通过 php-fpm 运行一个应用程序,这是项目结构:

enter image description here

我想要做的是由 src/writable 用户 chown 目录 src/publicwww-data

docker-compose 文件包含以下内容:

version: '3.9'

services:

  php-fpm:
    container_name: boilerplate_app
    restart: always
    build:
      context: .
      dockerfile: ./docker/php-fpm/Dockerfile
    volumes:
      - ./src:/var/www/html

  nginx:
    image: nginx:stable-alpine
    container_name: boilerplate_nginx
    restart: always
    volumes:
      - ./src:/var/www/html
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/sites/:/etc/nginx/sites-available
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d
    depends_on:
      - php-fpm
    environment:
      VIRTUAL_HOST: ${HOST}
      LETSENCRYPT_HOST: ${HOST}
      LETSENCRYPT_EMAIL: ${EMAIL}
      
  database:
    container_name: boilerplate_db
    restart: always
    build:
      context: ./docker/database
    environment:
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PWD}
      - MYSQL_ROOT_PASSWORD=${DB_PWD_ROOT}
    volumes:
      - ./docker/database/data.sql:/docker-entrypoint-initdb.d/data.sql

  phpmyadmin:
    container_name: boilerplate_phpmyadmin
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - 8089:80
    environment:
      - PMA_HOST=database
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PWD}
      - MYSQL_ROOT_PASSWORD=${DB_PWD_ROOT}
    depends_on:
      - database
    
networks:
  default:
    external:
      name: proxy

我正在为 Dockerfile 运行以下 php-fpm

FROM php:8.0.2-fpm-alpine
WORKDIR /var/www/html

RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install mysqli
RUN apk add icu-dev

RUN docker-php-ext-configure intl && docker-php-ext-install intl

RUN apk add --update libzip-dev curl-dev &&\
    docker-php-ext-install curl && \
    apk del gcc g++ &&\
    rm -rf /var/cache/apk/*

COPY docker/php-fpm/config/php.ini /usr/local/etc/php/

COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer

RUN apk add --update nodejs nodejs-npm
RUN npm install gulp-cli -g
RUN npm install

COPY src src/

RUN ls -l
RUN chown -R www-data:www-data /var/www/html/writable
RUN chown -R www-data:www-data /var/www/html/public

CMD ["php-fpm"]

EXPOSE 9000

问题在于到达此行时:

RUN chown -R www-data:www-data /var/www/html/writable

我明白了:

<块引用>

chown: /var/www/html/writable: 没有那个文件或目录

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您从未将文件复制或添加到 /var/www/html/

可能您在复制命令中选择了错误的目标路径:COPY src src/

还请考虑您的 docker-compose 文件的卷仅在您的容器正在运行时挂载,而不是在构建映像时挂载。 卷还可以覆盖文件夹和文件,如果容器正在运行,您确实已将它们添加到 Dockerfile 中。

您可能想要创建帮助程序脚本,该脚本在容器启动时运行并会显示文件夹。 https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#entrypoint

相关问题