我正在尝试将使用GitLab服务器上的一些私有npm依赖项的项目码头化(URL类似于10.1.1.150)。当我在CMD中运行npm install时,它可以正常运行,但是在Docker中,出现以下错误:
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t https://10.1.1.150/WebDev/firstdependency.git
npm ERR!
npm ERR! remote: HTTP Basic: Access denied
npm ERR! fatal: Authentication failed for 'https://10.1.1.150/WebDev/firstdependency.git/'
npm ERR!
npm ERR! exited with error code: 128
我的Dockerfile:
FROM node
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm set strict-ssl false --global
RUN git init
RUN git config --global http.sslVerify false
RUN git config http.emptyAuth true
RUN npm install --production
RUN mv node_modules ../
COPY . .
CMD npm start
package.json文件的一部分,其中包含失败的部分:
"repository": {
"type": "git",
"url": "https://10.1.1.150/WebDev/thisproject.git"
},
"dependencies": {
"@mycompany/firstdependency": "git+https://10.1.1.150/WebDevelopment/firstdependency.git",
"@mycompany/seconddependency": "git+https://10.1.1.150/WebDevelopment/seconddependency.git",
"@mycompany/thirddependency": "git+https://10.1.1.150/WebDevelopment/thirddependency.git"
我想问题的核心是我无法在Dockerfile中传递我的凭据,因此它无法登录到我们的本地存储库。 操作系统:WIN10 npm:6.13.4 码头工人:19.03.2 如何解决此身份验证错误?
答案 0 :(得分:0)
我假设您正在通过ssh私人证书对您的私人npm注册表进行身份验证。在这种情况下,您将需要使用Docker Build Enhancements。
以下是您需要更新的一些内容:
Dockerfile
中,将此行添加为第一行:# syntax=docker/dockerfile:experimental
RUN npm install --production
更改为RUN --mount=type=ssh npm install --production
docker build --ssh <image_name> .
新的 Dockerfile
# syntax=docker/dockerfile:experimental
FROM node
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm set strict-ssl false --global
RUN git init
RUN git config --global http.sslVerify false
RUN git config http.emptyAuth true
RUN --mount=type=ssh npm install --production
RUN mv node_modules ../
COPY . .
CMD npm start
编辑1
由于您将凭据设置为环境变量(应考虑将其更改为使用ssh证书),因此,我建议您使用此解决方案。
GIT_USERNAME=<value>
GIT_PASSWORD=<value>
Dockerfile
更新为# syntax=docker/dockerfile:experimental
# Builder layer
FROM node as builder
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm set strict-ssl false --global
RUN git init
RUN git config --global http.sslVerify false
RUN git config http.emptyAuth true
RUN --mount=type=secret,id=gitsecret \
set -a; \
source /run/secrets/gitsecret; \
set +a; \
npm install --production
# Main layer
FROM node
WORKDIR /usr/src/app
RUN mv node_modules ../
COPY --from=builder /usr/src/app/node_modules /usr/src/node_modules
COPY . .
CMD npm start
docker build --secret id=gitsecret,src=/gitsecret.txt <image_name> .
这种方式是为了确保:
注意我没有您的完整源代码,因此无法保证该代码仅通过复制和粘贴即可适用于您的情况。但是,这里有想法,请相应地对其进行更新!