docker - docker build 期间的 SSH 代理转发

标签 docker docker-compose dockerfile ssh-keys docker-image

在通过 dockerfile 构建 docker 镜像时,我必须克隆一个 github 存储库。我将我的公共(public) ssh key 添加到了我的 git hub 帐户中,并且我能够从我的 docker 主机克隆 repo。虽然我看到我可以通过在 docker run like 时映射 $SSH_AUTH_SOCK env 变量来使用 docker 主机的 ssh key

docker run --rm -it --name container_name \
  -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \
  -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK my_image

如何在 docker build 期间做同样的事情?

最佳答案

适用于 Docker 18.09 及更高版本

您可以使用 Docker 的新功能将现有的 SSH 代理连接或 key 转发给构建器。例如,这可以在构建期间克隆您的私有(private)存储库。

步骤:

首先设置环境变量以使用新的 BuildKit

export DOCKER_BUILDKIT=1

然后使用新的(实验性)语法创建 Dockerfile:

# syntax=docker/dockerfile:experimental

FROM alpine

# install ssh client and git
RUN apk add --no-cache openssh-client git

# download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

# clone our private repository
RUN --mount=type=ssh git clone git@github.com:myorg/myproject.git myproject

并使用构建图像

docker build --ssh default .

在此处了解更多信息:https://medium.com/@tonistiigi/build-secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066

关于docker - docker build 期间的 SSH 代理转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43418188/

相关文章:

php - Docker-Symfony-Mysql : SQLSTATE[HY000] [2002] Connection refused

docker - 无法启动logstash

node.js - 找不到模块 "express"- docker-compose nodejs 服务

docker - Docker没有缓存Alpine apk add命令

docker - Nginx 在多容器 docker compose 设置中找不到上游主机,并且在客户端上找不到主机 :3000

docker - 如何使用NGINX将请求转发到Docker Microservice

docker - 这个 docker-compose.yml 文件有什么问题

c# - 无法使用Docker创建docker文件和Project文件

bash - Dockerfile CMD 未在容器启动时运行

azure - ASP.NET Core Docker 容器内的 Nginx