VS Code Dev Containers安装node-pty时遇npm错误求助
问题:VS Code Dev Containers中安装node-pty失败
选择Ubuntu作为容器环境,通过VS Code Dev Containers内置脚本搭建环境时,安装node-pty过程中触发npm错误,核心报错为make: printf: Operation not permitted,完整错误日志如下:
[153 ms] Dev Containers 0.309.0 in VS Code 1.81.1 (6c3e3dba23e8fadc360aed75ce363ba185c49794). [148 ms] Start: Resolving Remote [247 ms] Start: Check Docker is running [247 ms] Start: Run: docker version --format {{.Server.APIVersion}} [350 ms] Server API version: 1.38 [352 ms] Start: Run: docker build -f /var/folders/m6/qgsyfz317p9ft38nb65s5zrh0000gn/T/vsch/bootstrap-image/0.309.0/bootstrap.Dockerfile -t vsc-volume-bootstrap /var/folders/m6/qgsyfz317p9ft38nb65s5zrh0000gn/T/vsch/bootstrap-image/0.309.0 Sending build context to Docker daemon 1.833MB Step 1/5 : FROM mcr.microsoft.com/devcontainers/base:0-alpine-3.16 ---> e348e1c8ff05 Step 2/5 : RUN echo "@old https://dl-cdn.alpinelinux.org/alpine/v3.15/main" >> /etc/apk/repositories ---> Using cache ---> b6a62e065413 Step 3/5 : RUN apk add --no-cache git-lfs nodejs python3 npm make g++ docker-cli docker-cli-buildx docker-cli-compose openssh-client-default@old ; ---> Using cache ---> 70ecbfbfb4f3 Step 4/5 : RUN cd && npm i node-pty ---> Running in 708f9e6c89ae npm ERR! code 1 npm ERR! path /root/node_modules/node-pty npm ERR! command failed npm ERR! command sh -c node-gyp rebuild npm ERR! make: Entering directory '/root/node_modules/node-pty/build' npm ERR! make: Leaving directory '/root/node_modules/node-pty/build' npm ERR! gyp info it worked if it ends with ok npm ERR! gyp info using node-gyp@9.0.0 npm ERR! gyp info using node@16.20.1 | linux | x64 npm ERR! gyp info find Python using Python version 3.10.12 found at "/usr/bin/python3" npm ERR! gyp http GET https://nodejs.org/download/release/v16.20.1/node-v16.20.1-headers.tar.gz npm ERR! gyp http 200 https://nodejs.org/download/release/v16.20.1/node-v16.20.1-headers.tar.gz npm ERR! gyp http GET https://nodejs.org/download/release/v16.20.1/SHASUMS256.txt npm ERR! gyp http 200 https://nodejs.org/download/release/v16.20.1/SHASUMS256.txt npm ERR! gyp info spawn /usr/bin/python3 npm ERR! gyp info spawn args [ npm ERR! gyp info spawn args '/usr/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py', npm ERR! gyp info spawn args 'binding.gyp', npm ERR! gyp info spawn args '-f', npm ERR! gyp info spawn args 'make', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args '/root/node_modules/node-pty/build/config.gypi', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args '/usr/lib/node_modules/npm/node_modules/node-gyp/addon.gypi', npm ERR! gyp info spawn args '-I', npm ERR! gyp info spawn args '/root/.cache/node-gyp/16.20.1/include/node/common.gypi', npm ERR! gyp info spawn args '-Dlibrary=shared_library', npm ERR! gyp info spawn args '-Dvisibility=default', npm ERR! gyp info spawn args '-Dnode_root_dir=/root/.cache/node-gyp/16.20.1', npm ERR! gyp info spawn args '-Dnode_gyp_dir=/usr/lib/node_modules/npm/node_modules/node-gyp', npm ERR! gyp info spawn args '-Dnode_lib_file=/root/.cache/node-gyp/16.20.1/<(target_arch)/node.lib', npm ERR! gyp info spawn args '-Dmodule_root_dir=/root/node_modules/node-pty', npm ERR! gyp info spawn args '-Dnode_engine=v8', npm ERR! gyp info spawn args '--depth=.', npm ERR! gyp info spawn args '--no-parallel', npm ERR! gyp info spawn args '--generator-output', npm ERR! gyp info spawn args 'build', npm ERR! gyp info spawn args '-Goutput_dir=.' npm ERR! gyp info spawn args ] npm ERR! gyp info spawn make npm ERR! gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] npm ERR! make: printf: Operation not permitted npm ERR! make: *** [pty.target.mk:111: Release/obj.target/pty/src/unix/pty.o] Error 127 npm ERR! gyp ERR! build error npm ERR! gyp ERR! stack Error: `make` failed with exit code: 2 npm ERR! gyp ERR! stack at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23) npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:513:28) npm ERR! gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:293:12) npm ERR! gyp ERR! System Linux 4.9.93-linuxkit-aufs npm ERR! gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" npm ERR! gyp ERR! cwd /root/node_modules/node-pty npm ERR! gyp ERR! node -v v16.20.1 npm ERR! gyp ERR! node-gyp -v v9.0.0 npm ERR! gyp ERR! not ok npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2023-09-07T22_27_27_908Z-debug-0.log The command '/bin/sh -c cd && npm i node-pty' returned a non-zero code: 1 [6375 ms] Command failed: docker build -f /var/folders/m6/qgsyfz317p9ft38nb65s5zrh0000gn/T/vsch/bootstrap-image/0.309.0/bootstrap.Dockerfile -t vsc-volume-bootstrap /var/folders/m6/qgsyfz317p9ft38nb65s5zrh0000gn/T/vsch/bootstrap-image/0.309.0 [6375 ms] Exit code 1
解决方案
- 切换容器基础镜像到Ubuntu:日志显示当前使用的是Alpine镜像,Alpine的musl libc与node-pty的编译存在兼容问题,且容器安全规则易触发权限限制。修改Dev Container配置,使用Ubuntu基础镜像,比如
mcr.microsoft.com/devcontainers/base:jammy。 - 添加--unsafe-perm参数安装:在安装node-pty时执行
npm i node-pty --unsafe-perm,绕过npm的权限沙箱限制,解决编译过程中的printf权限问题。 - 更新node-gyp版本:先全局安装最新版node-gyp:
npm install -g node-gyp@latest,再安装node-pty,避免旧版node-gyp的兼容性问题。 - 临时调整容器安全策略:如果是Docker的AppArmor规则导致权限问题,可在启动容器时添加参数
--security-opt apparmor=unconfined(仅用于测试,生产环境需谨慎配置)。
内容的提问来源于stack exchange,提问作者TRCK
相关产品推荐
相关产品推荐

