You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dockerfile中SSH密钥格式无效导致Git子模块拉取失败如何修复

问题原因
  • 原代码中处理SSH私钥的Python脚本使用了Python2专属的raw_input()语法,而当前openjdk:11基础镜像中apt install python默认安装的是Python3,执行报错导致生成的/root/.ssh/id_rsa内容格式完全错误,这是触发invalid format报错的核心原因
  • 直接使用echo $SSH_KEY传递参数会丢失密钥中的特殊格式字符,也会导致私钥格式异常
  • 原Dockerfile未显式安装git、openssh-client依赖,部分版本的openjdk基础镜像没有预装这两个工具,会导致git操作失败
修正后的Dockerfile
FROM openjdk:11

COPY . .

# 统一安装所有需要的依赖,包含python3、git、ssh客户端
RUN apt-get update -y && \
    apt-get install -y python3 git openssh-client && \
    rm -rf /var/lib/apt/lists/*

RUN mkdir -p /root/.ssh && \
    chmod 0700 /root/.ssh && \
    ssh-keyscan gitlab.com > /root/.ssh/known_hosts

ARG SSH_KEY=autofilled

# 改用Python3语法,用printf传递参数避免丢失格式
RUN printf "%s" "$SSH_KEY" | python3 -c "key = input();print('-----BEGIN OPENSSH PRIVATE KEY-----\n' + '\n'.join(key[i:i+64] for i in range(0, len(key), 64)) + '\n-----END OPENSSH PRIVATE KEY-----')" > /root/.ssh/id_rsa

RUN chmod 600 /root/.ssh/id_rsa
RUN git submodule init
RUN git submodule update
# 构建完成后删除私钥,避免敏感信息留存到镜像中
RUN rm -rf /root/.ssh/

RUN chmod -R +x ./sbt-dist
RUN chmod +x ./sbt
RUN ./sbt dist
WORKDIR ./target/universal
RUN unzip ./dist.zip
WORKDIR ./dist/bin
RUN chmod +x ./smart-flats
EXPOSE 5000
CMD ["./smart-flats", "-Dhttp.port=5000", "-J-Xmx1536m"]
构建注意事项

传入SSH_KEY参数时,需要先把本地私钥文件的所有换行符删除,转换为单行字符串后再作为构建参数传入,示例构建命令如下:

docker build --build-arg SSH_KEY="$(cat ~/.ssh/id_rsa | tr -d '\n')" .

内容的提问来源于stack exchange,提问作者Sizor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:54:01