Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Dockerfile chown命令无法更改容器文件夹权限_Php_Laravel_Docker_Docker Compose_Chown - Fatal编程技术网

Php Dockerfile chown命令无法更改容器文件夹权限

Php Dockerfile chown命令无法更改容器文件夹权限,php,laravel,docker,docker-compose,chown,Php,Laravel,Docker,Docker Compose,Chown,我试过下面的帖子 但是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 dependenc

我试过下面的帖子

但是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"]
服务器Debian9

下线未按预期工作
复制--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放入command
    COPY composer.lock composer.json/var/www/
    并给予正确的许可。确保你只做这个 创建要向其分配权限的用户后 文件夹
  • 实际上你甚至不需要
    拷贝/var/www
    此处的命令原因 您正在对chown使用高级复制命令,这将需要 注意使用chown中设置的权限复制所有文件(www 就你而言)
  • WORKDIR
    您可以在末尾或之后执行
    COPY--chown

  • 在上面给定的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放入command
    COPY composer.lock composer.json/var/www/
    并给予正确的许可。确保你只做这个 创建要向其分配权限的用户后 文件夹
  • 实际上你甚至不需要
    拷贝/var/www
    此处的命令原因 您正在对chown使用高级复制命令,这将需要 注意使用chown中设置的权限复制所有文件(www 就你而言)
  • WORKDIR
    您可以在末尾或之后执行
    COPY--chown

  • 你能提供更多的信息吗?你能提供更多的信息吗?