我正在使用docker-compose.yml运行我的Laravel应用。如果我跑步,一切都会很好
chmod -R 755 storage
在幼虫的根中。
但是我想要在Dockerfile上定义权限。 app / docker / web / Dockerfile
FROM php:7.2.10-apache-stretch
RUN apt-get update -yqq && \
apt-get install -y apt-utils zip unzip && \
apt-get install -y nano && \
apt-get install -y libzip-dev libpq-dev && \
apt-get install -y libxml2-dev && \
apt-get install -y libcurl4-openssl-dev pkg-config libssl-dev && \
a2enmod rewrite && \
docker-php-ext-configure zip --with-libzip && \
docker-php-ext-install zip && \
rm -rf /var/lib/apt/lists/*
RUN pecl install mongodb && \
docker-php-ext-enable mongodb
RUN curl -sS https://getcomposer.org/installer | php -- --install-
dir=/usr/local/bin --filename=composer
COPY default.conf /etc/apache2/sites-enabled/000-default.conf
WORKDIR /var/www/app
ADD . /var/www/app
RUN chown -R www-data: /var/www/app
RUN chmod -R 755 /var/www/app/storage
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
EXPOSE 80
还有docker-compose.yml
version: '3.1'
services:
web:
container_name: ${APP_NAME}
build:
context: ./docker/web
ports:
- 8088:80
volumes:
- ./:/var/www/app
depends_on:
- mongo
links:
- mongo:mongo
mongo:
image: mongo
restart: always
ports:
- "27016:27016"
volumes:
- ./storage/mongodb:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: password
运行docker-compose时
chmod: cannot access '/var/www/app/storage': No such file or directory
ERROR: Service 'web' failed to build: The command '/bin/sh -c chmod -R
755 /var/www/app/storage' returned a non-zero code: 1
有人可以告诉我我做错了什么吗? 预先感谢。
答案 0 :(得分:1)
我猜这个图像的默认用户是ubuntu,您正在将文件夹权限切换为www-data,这将使默认用户能够读取但不能写入。
对于将apache作为www-data运行的生产设置来说是正确的,但是请注意,您正在以该图像的默认用户身份启动apache,因此请尝试删除这两个语句:
RUN chown -R www-data: /var/www/app
RUN chmod -R 755 /var/www/app/storage
这样,安装文件夹的同一用户也将运行apache
如果这行不通,请全力以赴,然后让超级用户使用以下命令运行所有步骤
USER root
答案 1 :(得分:0)
在Dockerfile中,您已经在映像中复制文件:ADD . /var/www/app
。
因此,在您的docker-compose.yml中映射该卷也没有意义。
解决方案是删除Web服务中的卷声明:
volumes:
- ./:/var/www/app