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

Ubuntu系统下Docker镜像存根分区,容器运行指定其他分区可行吗?

需求可行性及解决方案

该需求完全可行,核心是将容器运行时产生的数据(而非镜像本身)转移到目标分区,同时保留镜像在根分区。以下是具体实现方案:

方案一:启动容器时挂载目标分区目录(单次生效)

  1. 在目标分区(如/home)创建MySQL数据存储目录,设置正确权限:

    sudo mkdir -p /home/mysql_data
    sudo chown 999:999 /home/mysql_data
    

    999是官方MySQL镜像中mysql用户的UID/GID,确保容器拥有读写权限

  2. 启动容器时通过-v参数挂载目录:

    docker run -d \
      --name mysql-container \
      -e MYSQL_ROOT_PASSWORD=your-root-pass \
      -v /home/mysql_data:/var/lib/mysql \
      mysql:your-image-tag
    

    容器运行时产生的所有数据都会存在/home/mysql_data,不占用根分区空间,镜像仍保留在/var/lib/docker。

方案二:使用自定义Docker卷(持久化管理)

通过Docker卷统一管理存储,更便于后续维护:

  1. 创建绑定到目标分区的自定义卷:

    docker volume create --driver local \
      --opt type=none \
      --opt device=/home/mysql_data \
      --opt o=bind \
      mysql-home-volume
    
  2. 启动容器时使用该卷:

    docker run -d \
      --name mysql-container \
      -e MYSQL_ROOT_PASSWORD=your-root-pass \
      -v mysql-home-volume:/var/lib/mysql \
      mysql:your-image-tag
    

    效果与方案一一致,卷可重复用于其他容器。

方案三:全局修改Docker容器存储路径(所有容器生效)

若希望所有容器的运行时数据都转移到目标分区,可修改Docker守护进程配置:

  1. 停止Docker服务:

    sudo systemctl stop docker docker.socket
    
  2. 在目标分区创建容器存储目录:

    sudo mkdir -p /home/docker_containers
    
  3. 编辑/etc/docker/daemon.json(不存在则新建):

    {
      "data-root": "/var/lib/docker",
      "graph": "/home/docker_containers"
    }
    

    data-root保留为根分区路径(存储镜像),graph指定容器运行时数据的存储目录。部分新版本Docker可能需调整参数,建议先验证配置有效性。

  4. 重启Docker服务:

    sudo systemctl start docker
    

    此后所有容器的运行时数据都会存储到/home/docker_containers,镜像仍留在根分区。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:05:26