我有一个主存储库,其中包含一个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-rsa
,gitlab.com ecdsa-sha2-nistp256
,gitlab.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代理或类似的东西。你有想法吗?
答案 0 :(得分:0)
使用docker 1809+,您可以使用新的Dockerfile语法将ssh文件夹直接安装到容器中。
有一个示例与您的需求in the documentation非常相似。
从那里复制并适应您的用例:
# 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 .