Docker构建Flutter应用遇pubspec.lock权限拒绝错误求助
解决Docker构建Flutter应用时的pubspec.lock权限拒绝问题
问题根源
切换到developer用户后执行COPY命令时,Docker默认会以root权限将文件复制到容器内,导致/home/developer/my_flutter_app目录下的所有文件所有权属于root。而developer用户没有读写这些文件的权限,执行flutter pub get时无法创建或修改pubspec.lock,因此触发权限拒绝错误。
修复方案
方案一:复制时直接指定文件所有权(推荐)
使用Docker的COPY --chown参数,在复制文件时直接将所有权赋予developer用户,无需后续权限修改:
修改Dockerfile中的COPY行:
COPY --chown=developer:developer ./workspace/demo /home/developer/my_flutter_app
完整修改后的Dockerfile:
FROM ubuntu:18.04 # Prerequisites RUN apt update && apt install -y curl git unzip xz-utils zip libglu1-mesa openjdk-8-jdk wget # Set up new user RUN useradd -ms /bin/bash developer USER developer WORKDIR /home/developer # Prepare Android directories and system variables RUN mkdir -p Android/sdk ENV ANDROID_SDK_ROOT /home/developer/Android/sdk RUN mkdir -p .android && touch .android/repositories.cfg # Set up Android SDK RUN wget -O sdk-tools.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip RUN unzip sdk-tools.zip && rm sdk-tools.zip RUN mv tools Android/sdk/tools RUN cd Android/sdk/tools/bin && yes | ./sdkmanager --licenses RUN cd Android/sdk/tools/bin && ./sdkmanager "build-tools;29.0.2" "patcher;v4" "platform-tools" "platforms;android-29" "sources;android-29" ENV PATH "$PATH:/home/developer/Android/sdk/platform-tools" # Download Flutter SDK RUN git clone https://github.com/flutter/flutter.git ENV PATH "$PATH:/home/developer/flutter/bin" # Run basic check to download Dart SDK RUN flutter doctor # Create a directory for your Flutter project RUN mkdir -p /home/developer/my_flutter_app # Copy your Flutter project files to the Docker image with correct ownership COPY --chown=developer:developer ./workspace/demo /home/developer/my_flutter_app # Set the working directory to your Flutter project WORKDIR /home/developer/my_flutter_app # Run Flutter commands to build your app RUN flutter pub get RUN flutter build apk
方案二:复制后修改文件权限(兼容旧版Docker)
如果你的Docker版本不支持--chown参数,可临时切换回root用户修改权限,再切回developer:
在COPY命令后添加以下步骤:
# Fix file permissions USER root RUN chown -R developer:developer /home/developer/my_flutter_app USER developer
对应的Dockerfile片段:
# Copy your Flutter project files to the Docker image COPY ./workspace/demo /home/developer/my_flutter_app # Fix file permissions USER root RUN chown -R developer:developer /home/developer/my_flutter_app USER developer # Set the working directory to your Flutter project WORKDIR /home/developer/my_flutter_app # Run Flutter commands to build your app RUN flutter pub get RUN flutter build apk
内容的提问来源于stack exchange,提问作者arij kortas
相关产品推荐
相关产品推荐

