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

Docker构建时密钥文件出现乱码��问题排查求助

Docker Build Secret 生成文件开头乱码问题排查与解决

问题重现

本地有文件ssh_key.txt,内容为my_private_key,Dockerfile中使用以下指令挂载并写入密钥:

RUN --mount=type=secret,id=ssh_key \
  cat /run/secrets/ssh_key > /home/${USER_NAME}/.ssh/git_key

执行构建命令:

docker build --secret id=ssh_key,src=ssh_key.txt -t my_image .

运行镜像后查看/home/${USER_NAME}/.ssh/git_key,内容变为��my_private_key,开头出现乱码。

原因分析

乱码��对应字节0xFF 0xFE,是UTF-16LE编码的字节顺序标记(BOM)。大概率是你的ssh_key.txt文件本身以UTF-16LE编码保存(带BOM),或者Docker在传递secret时意外引入了BOM字节。当你用cat直接重定向时,BOM会被保留在目标文件中,导致显示乱码。

解决方案

方案1:修复源文件编码

将ssh_key.txt转换为UTF-8无BOM编码:

# 查看文件编码
file ssh_key.txt
# 转换为UTF-8无BOM
iconv -f UTF-16LE -t UTF-8 ssh_key.txt > ssh_key_utf8.txt
# 用转换后的文件构建
docker build --secret id=ssh_key,src=ssh_key_utf8.txt -t my_image .

方案2:在Dockerfile中去除BOM

如果无法修改源文件,可在写入时直接剔除开头的BOM字节:

RUN --mount=type=secret,id=ssh_key \
  tail -c +3 /run/secrets/ssh_key > /home/${USER_NAME}/.ssh/git_key

或者用tr命令删除指定字节:

RUN --mount=type=secret,id=ssh_key \
  tr -d '\xFF\xFE' < /run/secrets/ssh_key > /home/${USER_NAME}/.ssh/git_key

方案3:验证secret内容

构建前先检查源文件的字节内容,确认是否存在BOM:

hexdump -C ssh_key.txt
# 正常UTF-8无BOM的内容开头应该是:6d 79 5f 70 72 69 76 61 74 65 5f 6b 65 79
# 如果开头是ff fe 6d 79 ...,则说明是UTF-16LE带BOM

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:37:40