Dockerfile执行composer install无法创建/vendor目录的权限问题排查
问题分析与解决方案
没错,这就是权限问题。
你的Dockerfile里,COPY . .是在root用户身份下执行的,导致/app目录及其下所有文件的所有者都是root。之后切换到john用户时,这个普通用户没有权限在/app目录下创建vendor文件夹,因此触发报错。
修改Dockerfile的解决步骤
在切换到john用户之前,给john赋予/app目录的所有权即可:
FROM php:7.4.3-cli # Install system dependencies RUN apt-get update && apt-get install -y \ git \ curl \ libpng-dev \ libonig-dev \ libxml2-dev \ zip \ unzip # Clear cache RUN apt-get clean && rm -rf /var/lib/apt/lists/* # Install PHP extensions RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd COPY --from=composer:2.4.4 /usr/bin/composer /usr/local/bin/composer # Set working directory WORKDIR /app COPY . . # Add a new user "john" with user id 8877 RUN useradd -u 8877 john # 给john赋予/app目录的所有权 RUN chown -R john:john /app # Change to non-root privilege USER john RUN composer install
额外说明
如果你的Laravel应用后续需要写入storage或bootstrap/cache目录,上面的chown -R john:john /app已经覆盖了这些子目录,无需额外操作。
内容的提问来源于stack exchange,提问作者RedDoumham
相关产品推荐
相关产品推荐

