我的Dockerfile使用Alpine并在全球范围内安装react-scripts。尝试安装时,失败并显示“无法获取uid / gid”错误。我在npm install -g命令中添加了“ –unsafe- perm”选项。docker容器已成功创建,但是容器中的权限已通过消息通知已安装的文件。我看到所有用户名和组都设置为1000。我尝试在安装步骤之前将以下命令添加到Dockerfile中,但这无济于事。
RUN npm -g config set user root
建立错误
Error: could not get uid/gid [ 'nobody', 0 ] at /usr/local/lib/node_modules/npm/node_modules/uid-number/uid-number.js:37:16 at ChildProcess.exithandler (child_process.js:296:5) at ChildProcess.emit (events.js:182:13) at maybeClose (internal/child_process.js:961:16) at Process.ChildProcess._handle.onexit (internal/child_process.js:250:5) TypeError: Cannot read property 'get' of undefined at errorHandler (/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205:18) at /usr/local/lib/node_modules/npm/bin/npm-cli.js:76:20 at cb (/usr/local/lib/node_modules/npm/lib/npm.js:228:22) at /usr/local/lib/node_modules/npm/lib/npm.js:266:24 at /usr/local/lib/node_modules/npm/lib/config/core.js:83:7 at Array.forEach (<anonymous>) at /usr/local/lib/node_modules/npm/lib/config/core.js:82:13 at f (/usr/local/lib/node_modules/npm/node_modules/once/once.js:25:25) at afterExtras (/usr/local/lib/node_modules/npm/lib/config/core.js:173:20) at Conf.<anonymous> (/usr/local/lib/node_modules/npm/lib/config/core.js:231:22) /usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205 if (npm.config.get('json')) { ^ TypeError: Cannot read property 'get' of undefined at process.errorHandler (/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205:18) at process.emit (events.js:182:13) at process._fatalException (internal/bootstrap/node.js:472:27) ERROR: Service 'sample-app' failed to build: The command '/bin/sh -c npm install react-scripts@1.1.1 -g' returned a non-zero code:
Docker文件
/usr/src/app # cat Dockerfile # build environment FROM node:10-alpine as builder RUN mkdir -p /usr/src/app WORKDIR /usr/src/app ENV PATH /usr/src/app/node_modules/.bin:$PATH COPY package.json /usr/src/app/package.json RUN npm install RUN npm install react-scripts@1.1.1 -g COPY . /usr/src/app RUN npm run build # production environment FROM nginx:1.13.9-alpine COPY --from=builder /usr/src/app/build /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
UPD 固定的nodejs@12.4.0?
nodejs@12.4.0
检查这是否链接到nodejs / docker-node问题813:
根本原因似乎是:线程堆栈大小 新线程的默认堆栈大小glibc是根据控制主线程堆栈(RLIMIT_STACK)的资源限制确定的。 它通常最终为2-10 MB。 有三种可能的解决方案: 与高山团队讨论以解决此问题。已经有一些讨论 如下所示在节点docker alpine映像中修复它 npm_config_unsafe_perm=true在解决之前,请在Docker映像中将default设置为解决方法。
根本原因似乎是:线程堆栈大小
新线程的默认堆栈大小glibc是根据控制主线程堆栈(RLIMIT_STACK)的资源限制确定的。 它通常最终为2-10 MB。
glibc
RLIMIT_STACK
有三种可能的解决方案:
npm_config_unsafe_perm=true
您已经尝试了第三种选择,但也请考虑:
或者,您应该切换到苗条(Debian)版本,直到Alpine团队解决此问题为止。