【问题标题】:Set volume size in Dockerrun.aws.json在 Dockerrun.aws.json 中设置卷大小
【发布时间】:2020-03-13 12:42:48
【问题描述】:

嘿,我正在通过弹性 beanstalk 部署我的多容器 docker env。

我的 docker-compose.yml 有一个类似

的条目
service:
    image: redis
    volumes:
        - redisdata:/data
volumes:
    redisdata:

通过这种方式,redisdata 的内容被持久化到磁盘并“存活”部署。

在 dockerrun.aws.json 方面,这会导致

{
    "AWSEBDockerrunVersion": 2,
    "containerDefinitions": [
        {
            "essential": true,
            "image": "redis",
            "mountPoints": [
                {
                    "containerPath": "/data",
                    "sourceVolume": "Redisdata"
                }
            ],
            "name": "redis"
        }
    ],
    "family": "",
    "volumes": [
        {
            "host": {
                "sourcePath": "redisdata"
            },
            "name": "Redisdata"
        }
    ]
}

现在我的问题:

ec2-instance $ df -h
/dev/xvda1      7,8G    7,7G     0  100% /
/dev/dm-3        99G     89M   94G    1% /var/lib/docker/devicemapper/mnt/2d33cb679881808fac34182bfbec8feb57bf5f65c81c51b52c3f6c9917541040

创建的卷redisdata 的大小只有 7.7 GB,而 redis 容器的主根文件系统只有 99 GB。这是此类命名卷被挂载到 ec2 实例上的/var/app/current/redisdata 的结果,而该文件夹只是 8 GB 根挂载的一部分。 如何向 Dockerrun.aws.json 添加尺寸规格?

我已经看到在 Dockerrun.aws.json 中指定“标准”挂载点的选项,但是如何确保创建了源目录并且它有足够的空间?

【问题讨论】:

    标签: amazon-web-services docker amazon-ec2 amazon-elastic-beanstalk


    【解决方案1】:

    到目前为止,我发现的唯一解决方案是更改 ebextension 配置文件。

    我用内容创建了一个文件.ebextensions/bla.config

    option_settings:
      - namespace: aws:autoscaling:launchconfiguration
        option_name: RootVolumeSize
        value: "100"
    

    这样,docker 容器的根卷将有 100 GB。

    警告:部署此附加文件将擦除您的 ec2 实例,ec2 实例上的所有数据(包括 docker 卷)都将丢失!

    编辑:添加外部 EBS 设备的其他解决方案 这是我从 AWS 支持中得到的:

    按照以上步骤,可以添加外部EBS设备 成功将其挂载到 docker 容器中。另外,我建议你 考虑使用弹性文件系统 (EFS) 的选项 持久存储。 EFS 的优势在于它的存储 容量是弹性的,数据将是持久的,即使 环境 EC2 实例意外终止。这里是 博客 [6] 提供了将 EFS 卷挂载到 Elastic 的步骤 Beanstalk 环境实例。

    以下是用于添加外部 EBS 设备的 .ebextensions 配置文件( 大小 30GB) 到 beanstalk 环境的实例。您还可以添加 带有快照的 EBS 卷。

    [root@ip-172-31-21-181 multi-dockerapp]# cat .ebextensions/ebs.config commands:   
    01mkfs:
        command: "mkfs -t ext3 /dev/sdh"   02mkdir:
        command: "mkdir /media/volume1"   03mount:
        command: "mount /dev/sdh /media/volume1"
    option_settings:   
        aws:autoscaling:launchconfiguration:
            InstanceType: t2.large
            EC2KeyName: eks
            MonitoringInterval: "1 minute"
            IamInstanceProfile: "aws-elasticbeanstalk-ec2-role"
            BlockDeviceMappings: "/dev/sdh=:30,/dev/sdj=snap-51eef269"
    

    以下是创建卷的“Dockerrun.aws.json”文件的 sn-p sourcePath 为 '/media/volume1'

    [root@ip-172-31-21-181 multi-dockerapp]# cat Dockerrun.aws.json 
    {   "AWSEBDockerrunVersion":
    
    2,   "volumes": [
        {
          "name": "php-app",
          "host": {
            "sourcePath": "/media/volume1"
          }
        },
        ....
        "containerDefinitions": [
          {
            .....
          "mountPoints": [
            {
              "sourceVolume": "php-app",
              "containerPath": "/var/www/html"
            }
          ]
        } }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 2018-10-21
      • 2015-02-08
      相关资源
      最近更新 更多