如何在ECS容器中使用EBS卷

时间:2016-07-14 18:51:54

标签: linux docker containers amazon-ecs

我创建了一个EBS卷,将其附加并安装到我的Container实例中。在任务定义卷中,我使用已安装的目录设置卷Source Path。 容器数据不是在安装目录中创建的,安装的EBS之外的所有其他目录都可以正常工作。

目的是将数据保存在容器外,并用另一个卷备份它。

有没有办法在我的容器上使用这个附加的卷?或者是处理卷和备份的更好方法。

编辑:测试时使用随机的docker镜像运行它指定音量,我遇到了同样的问题。我设法让它重新启动Docker服务,但是我还在寻找一个没有重启Docker的解决方案。

检查具有已装入EBS的卷目录的容器

"HostConfig": {
  "Binds": [
  "/mnt/data:/data"
],
...
"Mounts": [
  {
    "Source": "/mnt/data",
    "Destination": "/data",
    "Mode": "",
    "RW": true,
    "Propagation": "rprivate"
  }
],

目录显示:

$ ls /mnt/data/
lost+found

使用不是已安装的EBS的卷目录检查容器

"HostConfig": {
  "Binds": [
    "/home/ec2-user/data:/data"
  ],
...
"Mounts": [
  {
    "Source": "/home/ec2-user/data",
    "Destination": "/data",
    "Mode": "",
    "RW": true,
    "Propagation": "rprivate"
  }
]

目录显示:

$ ls /home/ec2-user/data
databases dbms

2 个答案:

答案 0 :(得分:4)

听起来您可能想要做的就是使用AWS EC2 Launch Configurations。使用启动配置,您可以指定在启动时创建并附加到您的实例的EBS卷。这是在docker代理和后续任务开始之前发生的。

作为启动配置的一部分,您还希望更新配置详细信息下的用户数据,其中包含以下内容:

mkdir /data;
mkfs -t ext4 /dev/xvdb;
mount /dev/xvdb /data;
echo '/dev/xvdb /data ext4 defaults,nofail 0 2' >> /etc/fstab;

然后,只要您的容器设置为访问主机上的/data,一切都将在第一次运行时正常工作。

奖励:如果您正在使用ECS群集,我认为您已经使用启动配置来将您的实例加入群集。如果没有,您也可以使用以下内容自动添加新实例:

#!/bin/bash 
docker pull amazon/amazon-ecs-agent
docker run --name ecs-agent --detach=true --restart=on-failure:10 --volume=/var/run/docker.sock:/var/run/docker.sock --volume=/var/log/ecs/:/log --volume=/var/lib/ecs/data:/data --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro   --volume=/var/run/docker/execdriver/native:/var/lib/docker/execdriver/native:ro --publish=127.0.0.1:51678:51678 --env=ECS_LOGFILE=/log/ecs-agent.log --env=ECS_AVAILABLE_LOGGING_DRIVERS=[\"json-file\",\"syslog\",\"gelf\"] --env=ECS_LOGLEVEL=info --env=ECS_DATADIR=/data --env=ECS_CLUSTER=your-cluster-here amazon/amazon-ecs-agent:latest

特别是在该位,您需要编辑此部分:--env=ECS_CLUSTER=your-cluster-here

希望这有帮助。

答案 1 :(得分:0)

Using Data Volumes in Tasks上的当前文档似乎可以解决此问题:

  

在Amazon ECS优化的AMI版本2017.03.a发行之前,仅Docker守护程序启动时可用的文件系统可用于Docker容器。 您可以使用最新的经Amazon ECS优化的AMI来避免此限制,或者可以将docker软件包升级到最新版本并重新启动Docker。