npm install -g in onCreateCommand doesn't work in GitHub Actions
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 45/100
调研方向
从显示的 devcontainer.json 和 cdk.yml 开始,然后检查 devcontainers/ci 步骤以及它创建的用户、HOME 和 npm 环境。在本地和 GitHub Actions 中复现 npm install --global 命令,并比较实际用户和 home 路径。当配置的 npm 版本能在两个环境中成功安装,且不会出现 /home/runner 权限错误时,即表示完成。
由索引模型根据 Issue 内容生成。
描述
I'm not sure if this is an issue with devcontainers/ci, GitHub Actions, npm, or what, but I'm hoping that someone here can provide some insight.
Here is my setup:
My devcontainer.json
{
"name": "Jekyll Site With AWS Backend",
"image": "mcr.microsoft.com/devcontainers/jekyll:2.2.7-3.4-bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {
"version": "os-provided"
},
"ghcr.io/devcontainers/features/git-lfs:1": {
"autoPull": true,
"installDirectlyFromGitHubRelease": true,
"version": "latest"
},
"ghcr.io/devcontainers/features/aws-cli:1": {
"version": "2.34.12"
},
"ghcr.io/devcontainers/features/node:1": {
"version": "24"
}
},
"forwardPorts": [
4000, // Jekyll server
9229 // Node.js debugging
],
// Ensure the ~/.gnupg dir exists, otherwise the bind mount below will fail.
// mkdir -p option ensures no error if the dir already exists.
"initializeCommand": "mkdir -p ${localEnv:HOME}${localEnv:USERPROFILE}/.gnupg/",
"onCreateCommand": {
"updateNpm": "npm install --global [email protected]",
"aptUpdate": "sudo apt-get update && sudo apt-get upgrade --yes"
},
"updateContentCommand": {
"npm": "cd cdk/ && npm install",
"bundle": "cd web/ && bundle install"
},
"mounts": [
"source=${localEnv:HOME}${localEnv:USERPROFILE}/.gnupg/,target=/home/vscode/.gnupg/,type=bind"
]
}
My GitHub Actions workflow definition (`cdk.yml`)
name: CDK Synth and Deploy
on:
push:
branches: [main]
paths: [cdk/**, ".github/workflows/cdk.yml", ".devcontainer/**"]
pull_request:
branches: [main]
paths: [cdk/**, ".github/workflows/cdk.yml", ".devcontainer/**"]
workflow_dispatch:
permissions:
id-token: write
contents: read
jobs:
cdk:
runs-on: ubuntu-latest # Ubuntu version doesn't matter, everything will be running in our devcontainer anyway
environment: ${{ github.ref == 'refs/heads/main' && 'production' || 'test' }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
lfs: true
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
# This step builds the devcontainer and runs commands inside it, so CI env matches developer machines.
- name: CDK Synth and Deploy in Devcontainer
uses: devcontainers/[email protected]
env:
IMAGE_NAME: ghcr.io/dansite/devcontainer
with:
imageName: ${{ env.IMAGE_NAME }}
cacheFrom: ${{ env.IMAGE_NAME }} # Pre-build devcontainer image
inheritEnv: true
skipContainerUserIdUpdate: true # Don't update the user of the devcontainer to match the host (i.e., keep it `vscode` not `runner`)
runCmd: |
cd cdk/
npm ci
# Do other stuff
When building and opening this devcontainer locally in VS Code on Windows, everything works fine. However, when the devcontainers/ci step runs in GitHub Actions, I get the following error logs):
Error message
npm error code EACCES
npm error syscall mkdir
npm error path /home/runner
npm error errno EACCES
npm error FetchError: Invalid response body while trying to fetch https://registry.npmjs.org/npm: EACCES: permission denied, mkdir '/home/runner'
npm error at /usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/node_modules/minipass-fetch/lib/body.js:174:15
npm error at async Response.json (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/node_modules/minipass-fetch/lib/body.js:75:17)
npm error at async RegistryFetcher.packument (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/node_modules/pacote/lib/registry.js:98:25)
npm error at async RegistryFetcher.manifest (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/node_modules/pacote/lib/registry.js:128:23)
npm error at async Install.exec (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/lib/commands/install.js:114:27)
npm error at async Npm.exec (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/lib/npm.js:209:9)
npm error at async module.exports (/usr/local/share/nvm/versions/node/v24.14.1/lib/node_modules/npm/lib/cli/entry.js:67:5) {
npm error code: 'EACCES',
npm error errno: 'EACCES',
npm error syscall: 'mkdir',
npm error path: '/home/runner',
npm error type: 'system'
npm error }
npm error
npm error The operation was rejected by your operating system.
npm error It is likely you do not have the permissions to access this file as the current user
npm error
npm error If you believe this might be a permissions issue, please double-check the
npm error permissions of the file and its containing directories, or try running
npm error the command again as root/Administrator.
npm error Log files were not written due to an error writing to the directory: /home/runner/.npm/_logs
npm error You can rerun the command with `--loglevel=verbose` to see the logs in your terminal
The EACCES: permission denied, mkdir '/home/runner' part is super confusing to me. If commands in my devcontainer are running as the default vscode user, then why is npm trying to create a directory at /home/runner, especially when I have skipContainerUserIdUpdate: true set on the GitHub Actions step? For that matter, why is npm trying to create a home directory at all? How can I modify the above files to ensure that my devcontainer has the latest npm version both locally and in GitHub Actions workflows? Thanks in advance!
- 主要语言
- TypeScript
- 星标
- 499
- 派生
- 101
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
devcontainers/ci 的其他 Issue
-
难度 3/5 1-2 天 新手友好度 68/100
devcontainers/ci#446 ·
-
难度 3/5 1-2 天 新手友好度 55/100
devcontainers/ci#445 ·
-
难度 4/5 3-5 天 新手友好度 45/100
devcontainers/ci#444 · 2 条评论 · 3 个 reaction ·
-
Inputs are wrong in post step when action is called through a nested composite action可能已有人在做 @v-Kaniska244 于 68 天前认领。 未关闭
devcontainers/ci#442 · 已指派 1 人 ·
-
Add Woodpecker CI Plugin for Dev Containers可能已有人在做 @head1328 于 294 天前认领。 未关闭
难度 4/5 3-5 天 新手友好度 35/100
devcontainers/ci#430 ·
相似的 Issue
-
affected/v17 affected/v18 area/frontend type/bug
难度 2/5 1-3 小时 新手友好度 82/100
umbraco/Umbraco-CMS#24186 ·
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
better-auth/better-auth#11723 · 1 个 reaction ·
维护者通常 1 天内回复
-
area: docs difficulty: easy documentation good first issue
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复
-
Worker-Erstellung bricht langsame Git-Worktree-Checkouts nach 20 Sekunden ab可能已有人在做 @KajoVanBuyten 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 69/100
AgentSystemLabs/agent-office#367 ·
维护者通常 1 天内回复