[我正在尝试将SSH密钥传递到Dockerfile中,以便从Git中提取私有存储库。
当我在命令行上使用它时,它将起作用
export SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)"
docker build --build-arg SSH_PRIVATE_KEY --tag image:latest .
下面是我的Dockerfile的代码段
ARG SSH_PRIVATE_KEY
RUN apt-get update && apt-get install -y git && apt-get install -y nano && \
apt-get update && apt-get install -y python3.7 python3-pip python3.7-dev && \
rm -rf /var/lib/apt/lists/*
RUN mkdir -p ~/.ssh && umask 0077 && echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa \
&& git config --global url."[email protected]:".insteadOf https://github.com/ \
&& ssh-keyscan github.com >> ~/.ssh/known_hosts
但是,当我尝试从这样的makefile运行它时
SSH_PRIVATE_KEY=$(shell cat ~/.ssh/id_rsa)
build-image:
docker build --build-arg SSH_PRIVATE_KEY="${SSH_PRIVATE_KEY}" --tag image:latest -f ./docker/Dockerfile .
我收到错误
加载密钥“ /root/.ssh/id_rsa”:无效的格式
我在这里明显做错了什么吗?
谢谢!
# (not .PHONY, this actually creates the file)
some_dependency/some_file:
git clone [email protected]:some_organization/some_dependency
build-image: some_dependency/some_file
docker build --tag image:latest -f ./docker/Dockerfile .
您应避免运行ssh
,因为基本上不可能安全地管理私钥。在您的示例中,任何获得您的图像副本的人都可以轻松地进行]
docker run --rm image:latest cat .ssh/id_rsa
现在您的私钥已被泄露。
Dockerfile中针对git clone
的论点有些微妙。 Docker的层缓存意味着它将尝试避免重新运行已经运行的命令。这意味着,如果您以前已在此主机上构建了该映像,则重新运行docker build
将使用以前的相同签出;它不会重复输入git clone
,您将被困在旧版本中。这也意味着,在不同的主机上构建相同的映像可能会获得不同的结果,具体取决于首次构建映像的时间。在您的同事正在使用的私有存储库的上下文中,还要考虑以下情况:您需要针对拉取请求或另一个分支构建测试映像,或者您实际上需要针对该依赖项测试本地更改。专门用于
git clone
的Dockerfile中的master
在这里会给您带来麻烦;在主机上克隆存储库很容易允许这两种情况。