Podman构建Playwright Docker镜像时遇Permission Denied错误的解决
解决Playwright容器构建时的"Permission denied"错误
问题背景
在Windows 11上使用Podman构建Playwright测试容器时,执行RUN npx playwright install或RUN npx playwright install --with-deps步骤时,触发sh: 1: playwright: Permission denied错误,导致镜像构建失败。使用的Dockerfile如下:
FROM mcr.microsoft.com/playwright:v1.51.0-noble ARG ARG_CI ARG ARG_USER_NAME='TestUser' ARG ARG_PASSWORD='ABC123' ARG ARG_BASE_URL='https://www.google.de' ENV CI=ARG_CI ENV ENV_USER_NAME=$ARG_USER_NAME ENV ENV_PASSWORD=$ARG_PASSWORD ENV ENV_BASE_URL=$ARG_BASE_URL # copy project (including tests) COPY . /e2e WORKDIR /e2e # Install dependencies RUN npm install # Install browsers RUN npx playwright install # Run playwright test CMD USER_NAME=$ENV_USER_NAME PASSWORD=$ENV_PASSWORD BASE_URL=$ENV_BASE_URL npx playwright test --project=chromium || echo 'Test execution done...' && exit 0
错误核心日志:
STEP 13/14: RUN npx playwright install sh: 1: playwright: Permission denied Error:building at STEP "RUN npx playwright install": while running runtime: exit status 127
解决方案
1. 修正目录权限问题
Playwright官方镜像默认使用非root用户pwuser,但你复制项目到/e2e目录后,该目录的所有者是root,导致pwuser没有执行权限。在Dockerfile中添加权限修改步骤:
# copy project (including tests) COPY . /e2e # 将目录所有权转移给pwuser RUN chown -R pwuser:pwuser /e2e WORKDIR /e2e
2. 切换到pwuser执行命令
官方镜像已经为pwuser配置好了Playwright的运行环境,切换到该用户后执行npm和Playwright相关命令:
# 切换到官方默认的非root用户 USER pwuser # Install dependencies RUN npm install # Install browsers RUN npx playwright install
3. 优化环境变量赋值
你当前的ENV CI=ARG_CI会把CI设置成字符串"ARG_CI",而非构建参数的实际值,修正为:
ENV CI=${ARG_CI}
4. 可选:跳过重复浏览器安装
官方Playwright镜像已经预装了所有所需浏览器,除非你需要特定版本,否则可以直接删除RUN npx playwright install步骤,减少构建时间。
修改后的完整Dockerfile
FROM mcr.microsoft.com/playwright:v1.51.0-noble ARG ARG_CI ARG ARG_USER_NAME='TestUser' ARG ARG_PASSWORD='ABC123' ARG ARG_BASE_URL='https://www.google.de' # 正确传递构建参数到环境变量 ENV CI=${ARG_CI} ENV ENV_USER_NAME=$ARG_USER_NAME ENV ENV_PASSWORD=$ARG_PASSWORD ENV ENV_BASE_URL=$ARG_BASE_URL # copy project (including tests) COPY . /e2e # 将目录权限交给pwuser RUN chown -R pwuser:pwuser /e2e WORKDIR /e2e # 切换到官方镜像默认的非root用户 USER pwuser # Install dependencies RUN npm install # 若无需重新安装浏览器,可删除此步骤 RUN npx playwright install # Run playwright test CMD USER_NAME=$ENV_USER_NAME PASSWORD=$ENV_PASSWORD BASE_URL=$ENV_BASE_URL npx playwright test --project=chromium || echo 'Test execution done...' && exit 0
内容的提问来源于stack exchange,提问作者user1107888
相关产品推荐
相关产品推荐

