Thr*_*ood 5 rsa docker dockerfile
所以我想在我的镜像中包含一个 rsa 密钥,这样我就可以在构建镜像时将 git 存储库克隆到我的镜像中。但我真的不想将这个密钥保留在 docker build repo 中。有人对如何处理这个问题有好的建议吗?从 docker 文档和各种其他线程看来,似乎无法COPY从构建上下文之外获取文件。除了我不感兴趣使用以下解决方案之外:
对此有更好的解决方案吗?或者我是否必须将密钥保留在构建存储库中或从我想要使用的 rsa 密钥的位置进行构建?
我想一种可能的方法是 gitignore 构建存储库中的密钥,并在每次克隆它时将其放入,并在自述文件中记下它,以便其他开发人员也知道这样做。
---我的解决方案---
我认为这个问题没有“正确”的答案,但这是我采用的解决方案。
我(在某处)创建一个 linux 用户并为其生成一个密钥。然后在gitlab上创建一个只有repo克隆权限的用户。我将 linux 用户的公钥添加到 gitlab 用户。然后,对于构建,我创建 .ssh 文件夹并使用配置文件复制用户私钥。我只是将该用户密钥存储在 docker build 存储库中。
构建步骤:
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
Run Code Online (Sandbox Code Playgroud)
ssh 配置文件:
Host gitlab-app
HostName gitlab_host
IdentityFile /root/.ssh/id_rsa_app
IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)
现在 git 克隆可以在构建内部工作。
使用构建参数怎么样?在你的 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; \
} || :
Run Code Online (Sandbox Code Playgroud)
然后,当您构建映像时,使用以下--build-arg选项:
docker build -t sshtest --build-arg rsakey="$(cat /path/to/id_rsa)" .
Run Code Online (Sandbox Code Playgroud)
这将在构建时将密钥注入到映像中,而不要求它存在于您的构建上下文中。
| 归档时间: |
|
| 查看次数: |
1332 次 |
| 最近记录: |