所以我想在我的图像中包含一个rsa键,这样我就可以在构建时将git repo克隆到我的图像中。但我真的不想在docker build repo中保留这个键。有没有人对如何处理这个有一个很好的建议?从docker文档和各种其他线程看来,似乎无法从构建上下文之外的COPY
文件。除了以下我不感兴趣使用的解决方案:
How to include files outside of Docker's build context?
有更好的解决方案吗?或者我是否必须将密钥保留在构建仓库中,或者从我想要使用的rsa密钥的位置构建?
我想可能的方法是从构建存储库中获取密钥,只要我克隆它就把它放进去,并在自述文件中记下它,以便其他开发人员也知道这样做。
---我的解决方案---
我认为没有“正确”的答案,但这是我采用的解决方案。
我创建一个linux用户(某处)并为其生成一个密钥。然后在gitlab上创建一个只有repo克隆权限的用户。我将linux用户的公钥添加到gitlab用户。然后为构建我创建.ssh文件夹并使用配置文件复制用户私钥。我只是将用户密钥存储在docker build repo中。
构建步骤:
RUN mkdir ~/.ssh
RUN touch ~/.ssh/known_hosts
RUN ssh-keyscan -t rsa gitlab_host > ~/.ssh/known_hosts
COPY ./ssh/config /root/.ssh
COPY ./ssh/id_rsa_app /root/.ssh
RUN chmod 600 /root/.ssh/id_rsa_app
ssh配置文件:
Host gitlab-app
HostName gitlab_host
IdentityFile /root/.ssh/id_rsa_app
IdentitiesOnly yes
现在git clone在构建内部工作。
答案 0 :(得分:3)
使用build argument怎么样?在Dockerfile中执行类似的操作:
ARG rsakey
RUN test -n "${rsakey}" && { \
mkdir -p -m 700 /root/.ssh; \
echo "${rsakey}" > /root/.ssh/id_rsa; \
chmod 600 /root/.ssh/id_rsa; \
} || :
然后,在构建图像时,使用--build-arg
选项:
docker build -t sshtest --build-arg rsakey="$(cat /path/to/id_rsa)" .
这会在构建时将密钥注入到映像中,而不需要它存在于构建上下文中。