我正在通过 php-fpm
运行一个应用程序,这是项目结构:
我想要做的是由 src/writable
用户 chown 目录 src/public
和 www-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: 没有那个文件或目录
我做错了什么?
答案 0 :(得分:2)
您从未将文件复制或添加到 /var/www/html/
可能您在复制命令中选择了错误的目标路径:COPY src src/
还请考虑您的 docker-compose 文件的卷仅在您的容器正在运行时挂载,而不是在构建映像时挂载。
卷还可以覆盖文件夹和文件,如果容器正在运行,您确实已将它们添加到 Dockerfile
中。
您可能想要创建帮助程序脚本,该脚本在容器启动时运行并会显示文件夹。 https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#entrypoint