[id_rsa使用Makefile时Dockerfile中的无效格式

问题描述 投票:0回答:1

[我正在尝试将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”:无效的格式

我在这里明显做错了什么吗?

谢谢!

docker github makefile dockerfile ssh-keys
1个回答
0
投票
# (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在这里会给您带来麻烦;在主机上克隆存储库很容易允许这两种情况。

© www.soinside.com 2019 - 2024. All rights reserved.