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

Docker commit丢失用户专属SSH密钥的问题咨询

Docker commit后用户SSH密钥消失的问题解决

操作中的两个关键疏漏

  • docker commit命令参数错误:你执行的docker commit base_img IMG_A是错误用法,docker commit的第一个参数必须是你修改过的容器ID/名称,而非原始镜像。这条命令实际只是给base_img打了个新标签,完全没保存你对容器的修改。
  • 启动容器时用错镜像:即便commit命令正确,你步骤6基于base_img启动新容器,自然看不到任何修改,应该使用新生成的IMG_A镜像。

正确的docker commit操作流程

  1. 启动base_img容器后,通过docker ps -l获取该容器的ID或名称
  2. 执行docker commit <容器ID/名称> IMG_A,将修改后的容器保存为新镜像
  3. 基于新镜像启动容器:docker run -it IMG_A bash,此时用户X的.ssh目录及密钥会正常存在

更推荐的方案:用Dockerfile构建镜像

手动docker commit的方式容易出现操作疏漏,且镜像构建过程不透明。更规范的做法是编写Dockerfile来定义镜像内容:

FROM ubuntu:latest

# 安装依赖(如需ssh客户端)
RUN apt-get update && apt-get install -y openssh-client && rm -rf /var/lib/apt/lists/*

# 创建用户X并配置家目录
RUN useradd -m -s /bin/bash X

# 生成SSH密钥(无交互模式)
RUN su - X -c "ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519"

执行以下命令构建并启动容器:

docker build -t IMG_A .
docker run -it IMG_A bash

这种方式能确保镜像构建过程可追溯、可重复,不会出现手动操作导致的文件丢失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:02:49