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操作流程
- 启动base_img容器后,通过
docker ps -l获取该容器的ID或名称 - 执行
docker commit <容器ID/名称> IMG_A,将修改后的容器保存为新镜像 - 基于新镜像启动容器:
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
相关产品推荐
相关产品推荐

