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

Docker构建时COPY指令未将docker-upload私钥复制到容器问题排查

解决Docker容器构建后~/.ssh目录为空的问题

嘿,我来帮你搞定这个问题!你遇到的~/.ssh目录为空的情况,核心原因是Docker指令里的~解析逻辑和你想的不一样。

问题根源

在Dockerfile的RUN指令里,~会被shell解析为当前用户(这里是root)的家目录/root,但COPY指令是Docker直接处理的,它不会把~当作shell的家目录别名,而是会把~/.ssh/当成字面路径——也就是尝试把文件复制到当前工作目录下的.ssh子目录,而不是你预期的/root/.ssh!这就导致文件根本没复制到正确的位置,所以最后ls看到的/root/.ssh还是空的。

修复方案

把所有用到~的路径都换成绝对路径/root/.ssh,同时记得给私钥设置SSH要求的严格权限(必须是600,否则后续SSH连接会报错)。修改后的Dockerfile如下:

FROM centos:7
RUN yum -y -q install openssh-clients && \
    yum clean all && \
    rm -rf /var/cache/yum
RUN \
    mkdir -p /root/.ssh && \
    touch /root/.ssh/known_hosts && \
    ssh-keyscan -p 2022 -t rsa hostname > /root/.ssh/known_hosts
COPY docker-upload /root/.ssh/
# 给私钥设置正确权限,避免SSH拒绝使用
RUN chmod 600 /root/.ssh/docker-upload && \
    ls -all /root/.ssh

额外验证点

如果修改后还是有问题,先确认:

  • docker-upload文件是不是和你的Dockerfile在同一个目录下(构建上下文里必须存在这个文件,否则COPY会失败)
  • 构建命令的上下文路径是否正确(你用的是.,也就是当前目录,这个没问题)

重新执行构建命令,你就能在ls的输出里看到docker-upload文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:42:19