docker pull 镜像存储位置以及默认存储路径的修改

本文详细指导如何通过dockerinfo检查存储驱动,修改Docker的默认存储路径,包括镜像和容器的位置,并介绍如何创建Drop-In文件覆盖配置。同时,提供了创建新存储位置并迁移镜像和容器的步骤。
docker info

当前使用的存储驱动程序: devicemapper

默认路径:/var/lib/docker

cd /var/lib/docker

2. 镜像存储

cd image

cd devicemapper

more repositories.json

显示信息与docker images 中相同,repositories.json 文件中记录的就是已拉取的镜像信息。

3. 容器存储

cd containers

显示是容器序列号,不管什么状态的容器, 随机进入一个序列号, 显示如下:

cat hostname

与docker ps -a 对比

与其中一个容器id相同

二、修改默认存储路径

注意:该方法使用没有保存原镜像以及容器

1、docker info

获取当前使用的存储驱动程序:

sudo systemctl stop docker

创建一个Drop-In 文件

下一步是在/etc/systemd/system/docker.service.d 目录下创建一个Drop-In文件“docker.conf”,默认 docker.service.d 文件夹不存在。所以你必须先创建它。

# sudo mkdir /etc/systemd/system/docker.service.d

# sudo touch /etc/systemd/system/docker.service.d/docker.conf

创建Drop-In 文件的原因,是我们希望Docker 服务,使用docker.conf文件中提到的特定参数,将默认服务所使用的位于/lib/systemd/system/docker.service文件中的参数进行覆盖。如果你想深入了解Drop-In,请阅读system.unit文档

定义新的存储位置

现在打开docker.conf增加如下内容:

# sudo vi /etc/systemd/system/docker.service.d/docker.conf

[Service]

ExecStart= 

ExecStart= /usr/bin/dockerd --graph=/mnt/new_volume --storage-driver=devicemapper

/mnt/new_volume 是新的存储位置,而devicemapper是当前docker所使用的存储驱动。如果你的存储驱动有所不同,请输入之前第一步查看并记下的值。Docker官方文档中提供了更多有关各种存储驱动器的信息。现在,你可以重新加载服务守护程序,并启动Docker服务了。这将改变新的镜像和容器的存储位置。

# sudo systemctl daemon-reload

# sudo systemctl start docker

如果启动失败:

mv /etc/docker/daemon.json /etc/docker/daemon.conf

再次重新启动即可

下载一个镜像试试

<think>好的,我需要解决用户关于Docker镜像在关机后消失的问题。首先,用户提到使用docker pull拉取的镜像在关机后丢失,想要了解原因和解决方法。根据用户提供的三个引用,我需要结合这些信息来分析可能的原因。 首先,引用[1]中提到镜像在加载后自动消失,可能和存储驱动或缓存机制有关。引用[3]提到关闭SELinux后重启导致Docker镜像消失,可能涉及安全策略或存储配置。而引用[2]是关于如何配置Docker数据持久化,可能和存储卷有关。 接下来,我需要考虑Docker存储机制。Docker默认使用存储驱动来管理镜像和容器的数据。如果存储驱动配置不当,或者数据存储在临时文件系统中,关机后数据可能会丢失。例如,如果Docker的根目录挂载在内存文件系统(如tmpfs)上,关机后数据自然消失。 另外,用户提到电脑关机,这可能涉及到Docker服务的配置或者存储路径是否正确。比如,Docker默认存储路径可能在/var/lib/docker,如果这个目录被挂载到临时存储,或者权限问题导致无法持久化,就会导致镜像丢失。 还需要考虑用户的操作系统环境。比如,在Windows上使用Docker Desktop,默认可能会使用Hyper-V虚拟机,而数据存储位置是否正确配置了持久化卷。或者,在Linux系统中,是否因为SELinux等安全策略阻止了Docker的持久化存储。 可能的解决方法包括检查Docker存储配置,确保存储目录在持久化文件系统中,配置数据卷,或者调整Docker存储驱动。此外,检查是否有安全策略如SELinux影响了Docker存储,确保其配置正确。 最后,需要验证这些解决方法是否适用于用户的情况,可能需要用户检查他们的Docker配置,存储路径,以及安全设置。</think>### Docker镜像关机后丢失的原因及解决方法 #### 一、原因分析 1. **Docker存储驱动与文件系统配置问题** Docker默认存储路径为`/var/lib/docker`(Linux)或虚拟机内的专用目录(Windows/macOS)。若该路径挂载在临时文件系统(如内存或未持久化的虚拟磁盘)中,关机后镜像会丢失。例如,某些Docker Desktop配置可能默认使用临时存储[^2]。 2. **安全策略干扰(如SELinux)** 引用[3]中提到关闭SELinux后重启导致镜像消失。SELinux等安全机制可能限制Docker访问持久化存储目录,若配置不当,重启后Docker无法读取原有数据[^3]。 3. **镜像缓存机制异常** 引用[1]中的案例表明,Docker在某些异常操作(如强制关闭容器或镜像加载不完整)后,可能因缓存机制问题导致镜像丢失[^1]。 --- #### 二、解决方法 1. **检查存储路径配置** - **Linux系统**:确认`/var/lib/docker`挂载到持久化磁盘: ```bash df -h /var/lib/docker ``` - **Windows/macOS(Docker Desktop)**:在设置中调整存储路径到本地硬盘,而非默认的临时虚拟机磁盘[^2]。 2. **配置数据卷持久化** 通过挂载宿主机的持久化目录保存数据,避免依赖容器临时存储。例如运行MySQL时: ```bash docker run -v /host/path:/var/lib/mysql -d mysql:5.7 ``` 此命令将容器内的MySQL数据目录映射到宿主机的`/host/path`,确保重启后数据不丢失。 3. **修复安全策略配置** - 若关闭SELinux后出现问题(如引用[3]),需重新配置SELinux策略或恢复默认规则: ```bash # 临时关闭SELinux setenforce 0 # 永久关闭(需谨慎) sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ``` 4. **使用Docker镜像备份** 对关键镜像手动导出备份: ```bash docker save -o myimage.tar myimage:tag # 恢复镜像 docker load -i myimage.tar ``` --- #### 三、验证步骤 1. 检查Docker存储路径是否持久化: ```bash docker info | grep "Docker Root Dir" ``` 2. 测试镜像持久化: ```bash docker pull nginx docker images | grep nginx # 记录IMAGE ID systemctl reboot # 重启系统 docker images | grep nginx # 确认镜像仍存在 ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值