从docker容器中的脚本运行npm publish给出ENEEDAUTH

时间:2019-09-13 23:34:07

标签: node.js docker npm npm-publish

我有一个Node.js项目,我想使用我的发布脚本发布到我的私有托管范围注册表中(即不在registry.npmjs.org上)。

发布脚本在docker容器中运行。该脚本从docker容器内部的ENV变量中获取用户名/密码,并使用用户名和密码在本地生成.npmrc文件。

publish.sh

#!/usr/bin/env node

const exec = require('child_process').exec;
const fs = require('fs');

// other stuff..

const my_registry = //url for my registry
const username = //read username from args
const password = //read password from args

fs.writeFileSync('.npmrc', `registry=${my_registry}\nunsafe_perm=true\nalways_auth=true\n_auth=${Buffer.from(`${username}:${password}`).toString('base64')}`);
fs.chmodSync('.npmrc', '0755');

exec(`npm publish --registry ${my_registry}`, error => {
  if(error) {console.log(error); process.exit(1);}
});

Dockerfile

FROM node:latest

USER root

ARG USER
ARG PWD

WORKDIR /app/
COPY package.json /app/

RUN npm set unsafe_perm true && npm i

COPY . /app/

RUN node publish.sh -u USER -p PWD

到达脚本的npm publish部分时,会出现以下错误:

  

npm错误!代码ENEEDAUTH npm ERR!需要身份验证   发布npm ERR!需要身份验证您需要使用以下方式授权此计算机   npm adduser

但是,当我登录到docker容器并检查文件夹时,我可以看到.npmrc文件已经存在,并在其中写入了正确的身份验证。

我什至在npm whoami码头集装箱内做了一个游戏,它用我的用户名玩我,这意味着我已经登录了。

那我为什么会收到ENEEDAUTH错误?我该如何解决?

0 个答案:

没有答案