我尝试了以下帖子。

How to set up laravel nginx and mysql with docker compose

但是Dockerfile并未将/ var / www的许可更改为www:www。

由于所有php artisan命令均失败。

不知道为什么容器的文件夹权限保持不变。

FROM php:7.2-fpm

# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/

# Set working directory
WORKDIR /var/www

# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
mariadb-client \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
curl

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www

# Copy existing application directory contents
COPY . /var/www

# Copy existing application directory permissions
COPY --chown=www:www . /var/www
#RUN chown -R www:www /var/www

# Change current user to www
USER www

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]

服务器Debian 9

下线无法正常工作
COPY --chown = www:www。 / var / www

最佳答案

从上面给定的Dockerfile中,命令COPY --chown=www:www . /var/www上方的三个命令实际上是使用root用户创建目录/var/www的,因为Dockerfile中的命令是以root用户身份运行的。

执行此操作的命令是-

# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/

# Set working directory
WORKDIR /var/www

# Copy existing application directory contents
COPY . /var/www

一旦我们了解到命令是作为root用户运行的,就有许多方法可以解决Dockerfile中的此问题。
请按照以下步骤操作,这些可能是解决问题的方法之一。
  • 将chown放入命令COPY composer.lock composer.json /var/www/
    并给予正确的许可。确保只这样做
    创建用户后,您想将权限分配给
    文件夹。
  • 实际上,您甚至不需要COPY . /var/www命令,因为
    您正在使用chown的高级复制命令,这将需要
    使用chown(www
    在您的情况下)
  • WORKDIR可以在COPY --chown结尾或之后进行。
  • 关于php - Dockerfile chown命令无法更改容器文件夹权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59018374/

    10-14 18:48
    查看更多