我正在设置一个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密钥而无法提取此回购
答案 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一起使用。