对于从 Amazon Linux 1 AMI 启动的 Amazon ECS 实例,如何增加我的 Docker 容器存储卷限制?
上次更新时间:2019 年 8 月 23 日
对于从 Amazon Linux 1 Amazon 系统映像 (AMI) 启动的 Amazon Elastic Container Service (Amazon ECS) 实例,如何增加我的 Docker 容器存储卷限制?
简短描述
默认情况下,对于在 Amazon ECS 容器实例上创建的每个卷,Docker 将分配 10 吉比字节 (GiB) 的存储。当某个卷达到 10GiB 的上限时,您将无法继续向该卷写入任何数据,否则会导致容器实例崩溃。
重要提示:如果您使用 Amazon Linux 1 AMI 启动 ECS 集群中的容器实例,本文描述的内容将会适用。Amazon Linux 2 AMI 使用 Docker overlay2 存储驱动程序,它会让您的磁盘保留一个基本存储大小的空间。
解决方法
注意:以下说明适用于使用 devicemapper 存储驱动程序的实例。
1. 打开 Amazon ECS 控制台。
2. 在导航窗格中,选择集群。
3. 选择包含您要增加存储容量限制的容器实例的集群。
4. 选择 ECS 实例视图。
5. 使用 SSH 连接到您的容器实例。
6. 要查看卷的存储大小,请运行以下命令:
sudo lsblk
您应会收到与以下类似的输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:1 0 8G 0 disk
├─nvme0n1p1 259:2 0 8G 0 part /
└─nvme0n1p128 259:3 0 1M 0 part
nvme1n1 259:0 0 22G 0 disk
└─nvme1n1p1 259:4 0 22G 0 part
├─docker-docker--pool_tdata 253:1 0 21.7G 0 lvm
│ └─docker-docker--pool 253:2 0 21.7G 0 lvm
│ └─docker-259:2-394380-e76dfeb812faffb7a1b5b9553c76c44b70de4e1da69fadd3b89875fee8a6c624
253:3 0 10G 0 dm /var/lib/docker/devicemapper/mnt/e76dfeb812faffb7a1b5b9553c76c44b70de4e1da69fadd3b89875fee8a6c624
└─docker-docker--pool_tmeta 253:0 0 24M 0 lvm
└─docker-docker--pool 253:2 0 21.7G 0 lvm
└─docker-259:2-394380-e76dfeb812faffb7a1b5b9553c76c44b70de4e1da69fadd3b89875fee8a6c624
253:3 0 10G 0 dm /var/lib/docker/devicemapper/mnt/e76dfeb812faffb7a1b5b9553c76c44b70de4e1da69fadd3b89875fee8a6c624
注意:控制台将显示该容器卷的大小为 10G(相当于 10GiB)。
7. 要增加 Docker 卷的默认存储分配,请在容器实例上的 Docker 守护程序配置文件 /etc/sysconfig/docker 中,将 dm.basesize 存储选项设置为一个大于 10GiB 的值。
重要提示:在设置 dm.basesize 值后, 从 Docker 提取的任何新镜像都将使用您设置的新存储值。在更改该值以前创建或运行的任何容器仍将使用旧存储值。有关如何指定 Docker 守护程序配置的更多信息,请参阅 Docker 守护程序。
要将 dm.basesize 选项应用到您所有的容器,请在 Docker 服务启动之前设置该选项的值。例如,您可以在 Amazon Elastic Compute Cloud (Amazon EC2) 实例的用户数据中使用以下脚本,将默认卷分配设置为 20GiB:
#cloud-boothook
#!/bin/bash
cloud-init-per once docker_options echo 'OPTIONS="${OPTIONS} --storage-opt dm.basesize=20G"' >> /etc/sysconfig/docker
8. 要验证您的新 Docker 容器卷大于默认的 10GiB 限制,请运行以下命令:
sudo lsblk
您应会收到与以下类似的输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:1 0 8G 0 disk
├─nvme0n1p1 259:2 0 8G 0 part /
└─nvme0n1p128 259:3 0 1M 0 part
nvme1n1 259:0 0 22G 0 disk
└─nvme1n1p1 259:4 0 22G 0 part
├─docker-docker--pool_tdata 253:1 0 21.7G 0 lvm
│ └─docker-docker--pool 253:2 0 21.7G 0 lvm
│ └─docker-259:2-394381-13ae906f682ac57dcac9c247d0e1677f6da4f9dc35528b853a84f5dcbf570842
253:3 0 20G 0 dm /var/lib/docker/devicemapper/mnt/13ae906f682ac57dcac9c247d0e1677f6da4f9dc35528b853a84f5dcbf570842
└─docker-docker--pool_tmeta 253:0 0 24M 0 lvm
└─docker-docker--pool 253:2 0 21.7G 0 lvm
└─docker-259:2-394381-13ae906f682ac57dcac9c247d0e1677f6da4f9dc35528b853a84f5dcbf570842
253:3 0 20G 0 dm /var/lib/docker/devicemapper/mnt/13ae906f682ac57dcac9c247d0e1677f6da4f9dc35528b853a84f5dcbf570842