通过npm install访问私有git repos在Docker容器中

时间:2017-07-18 10:11:19

标签: node.js git docker jenkins ssh

我正在设置一个Docker容器,它将从GitHub中提取私有回购作为流程的一部分。目前我正在使用从命令行传递的Access Token(一旦通过Jenkins触发构建,它将更改)。

docker build -t my-container --build-arg GITHUB_API_TOKEN=123456 .

# Dockerfile
# Env Vars
ARG GITHUB_API_TOKEN
ENV GITHUB_API_TOKEN=${GITHUB_API_TOKEN}

RUN git clone https://${GITHUB_API_TOKEN}@github.com/org/my-repo

这很好用,似乎是一种安全的方式吗? (虽然需要检查var GITHUB_API_TOKEN仅在构建时可用)

我希望了解人们在运行npm install时如何处理ssh密钥或访问令牌,并从github中获取依赖关系

"devDependencies": {
  "my-repo": "git@github.com:org/my-repo.git",
  "electron": "^1.7.4"
}

目前我收不到错误Please make sure you have the correct access rights因为我没有在此容器中设置ssh密钥而无法提取此回购

2 个答案:

答案 0 :(得分:3)

使用multi-stage build方法。

您的Dockerfile应如下所示:

FROM alpine/git as base_clone
ARG GITHUB_API_TOKEN
WORKDIR /opt
RUN git clone https://${GITHUB_API_TOKEN}@github.com/org/my-repo

FROM <whatever>
COPY --from=base_clone /opt/my-repo /opt
...
...
...

构建

docker build -t my-container --build-arg GITHUB_API_TOKEN=123456 .

Github API令牌秘密不会出现在最终图像中。

答案 1 :(得分:1)

docker secrets是一个东西,但它只适用于作为docker swarm一部分的容器。它用于处理SSH密钥之类的东西。您可以按照文档建议进行操作,并创建一个1的群来使用此功能。

docker-compose也支持秘密,但我还没有将它们与compose一起使用。