You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker容器配置保存咨询:退出后数据丢失如何解决

如何保存Docker容器的配置修改?

这是个很常见的Docker入门问题——我当初刚用Docker的时候也踩过这个坑😅。首先得搞清楚为什么修改会丢失:Docker容器的文件系统是分层结构的,你在容器内安装软件、修改配置的操作,都存在容器的临时可写层里,一旦容器被删除(甚至有些时候停止后被清理),这层的内容就会消失。要永久保存这些修改,有两种常用方法:

方法1:用docker commit提交容器为新镜像

这是最直接的临时解决方案,适合快速保存当前容器的状态:

  1. 确认你的容器ID:从你提供的命令输出里,运行中的容器ID是a3a1c08a3dbd1c19...(如果没显示全可以用docker ps查看完整ID)。
  2. 提交容器为新镜像:比如针对Ubuntu的容器,执行以下命令:
    docker commit a3a1c08a3dbd ubuntu-with-tools:latest
    
    解释一下参数:
    • a3a1c08a3dbd:你要保存的目标容器ID
    • ubuntu-with-tools:latest:新镜像的名称和标签,你可以改成自己喜欢的命名
  3. 验证新镜像:运行docker images,你会看到刚创建的新镜像出现在列表里:
    root@ubuntu:/tmp# docker images
    REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
    ubuntu-with-tools    latest    xxxxxxxxxx     1 minute ago   200MB
    debian               latest    2b98c9851a37   4 weeks ago    100MB
    ubuntu               latest    f975c5035748   5 weeks ago    112MB
    ubuntu               14.04     dc4491992653   2 months ago   222MB
    
  4. 用新镜像启动容器:之后再启动容器时,直接使用这个新镜像,你的所有修改就都被保留下来了:
    docker run -it ubuntu-with-tools
    

方法2:用Dockerfile构建镜像(推荐长期使用)

docker commit的问题在于,你无法直观看到镜像里到底做了哪些修改,不利于后续维护和分享。更规范、可维护的方式是用Dockerfile来定义镜像的构建步骤:

  1. 创建一个Dockerfile:在本地新建一个文件命名为Dockerfile,内容如下(以Ubuntu为例):
    # 基于官方Ubuntu最新镜像
    FROM ubuntu:latest
    
    # 更新软件源并安装需要的工具,最后清理缓存减小镜像体积
    RUN apt-get update && \
        apt-get install -y mc iputils-ping traceroute && \
        apt-get clean && \
        rm -rf /var/lib/apt/lists/*
    
    # 设置容器启动后默认进入bash终端
    CMD ["/bin/bash"]
    
    如果是Debian镜像,只需要把FROM ubuntu:latest改成FROM debian:latest即可。
  2. 构建镜像:在Dockerfile所在目录执行以下命令:
    docker build -t ubuntu-with-tools .
    
    这里的.表示当前目录(即Dockerfile所在的目录)。
  3. 启动容器:同样用docker run -it ubuntu-with-tools启动容器,所有工具已经预装完成,而且你可以随时修改Dockerfile来更新镜像,步骤清晰可控。

额外小提醒

如果你只是临时使用容器,不想马上构建镜像,也可以用docker start <容器ID>重新启动之前停止的容器——只要容器没被删除,之前的修改还会存在。但这种方式不适合长期保存,因为容器很容易被误删。

你的原始命令输出参考:

root@ubuntu:/tmp# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
debian       latest    2b98c9851a37   4 weeks ago    100MB
ubuntu       latest    f975c5035748   5 weeks ago    112MB
ubuntu       14.04     dc4491992653   2 months ago   222MB
root@ubuntu:/tmp# docker ps -q
a3a1c08a3dbd
1c19...

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

火山引擎 最新活动