繁体   English   中英

通过SSH在Docker中安装私有npm软件包

[英]Install private npm package in Docker via SSH

我有一个主存储库,其中包含一个NPM软件包,该软件包可加载另一个私有NPM软件包,两者均位于Gitlab中的同一组织中。

我已经对此进行了数小时的研究,并发现了许多无效的方法。 首先是Dockerfile,其中包含我所认为的最常见的添加我的SSH密钥的方法。

FROM node:10.15.1-alpine as image
WORKDIR /usr/src/app
RUN apk add --update --no-cache openssh git

COPY package.json ./
ARG SSH_PRIVATE_KEY
RUN mkdir /root/.ssh/ && \
    echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/id_rsa && \
    touch /root/.ssh/known_hosts && \
    ssh-keyscan gitlab.com > /root/.ssh/known_hosts
RUN npm install

FROM image as build
COPY . .
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.2.1/wait /wait
RUN chmod +x /wait
CMD /wait && npm run start
EXPOSE 4000

我通过docker build --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)" -t test --squash .

我的package.json包含"shared": "git+ssh://git@gitlab.com:ORGA/PROJECT" ,其中ORGA / PROJECT是我的组织和项目的真实名称。

我总是总是收到git@gitlab.com: Permission denied (publickey).

在Docker中:

  • /root/.ssh/id_rsa :包含正确的SSH密钥,该密钥也在Gitlab中注册,并且可以在我自己的Mac上本地运行。
  • /root/.ssh/known_hosts :包含gitlab.com ssh-rsagitlab.com ecdsa-sha2-nistp256gitlab.com ssh-ed-25519

ls -lah /root/.ssh

-rw-------    1 root     root        3.2K Feb 26 14:05 id_rsa
-rw-r--r--    1 root     root         656 Feb 26 14:05 known_hosts

我也尝试将npm install添加到同一RUN命令。

我觉得我的git客户端无法访问SSH代理或类似的东西。 你有想法吗?

使用docker 1809+,您可以使用新的Dockerfile语法将ssh文件夹直接安装到容器中。

文档中有一个非常类似于您需要的示例。

从那里复制并适应您的用例:

# syntax=docker/dockerfile:experimental
FROM node:10.15.1-alpine as image

WORKDIR /usr/src/app

RUN apk add --update --no-cache openssh-client git \
 && mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

COPY package.json ./
RUN --mount=type=ssh npm install

# [...snip...]

然后: docker build --ssh default -t test --squash .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM