Amazon web services 在弹性Beanstalk应用程序中,如何在Docker容器之间共享卷?

Amazon web services 在弹性Beanstalk应用程序中,如何在Docker容器之间共享卷?,amazon-web-services,amazon-ec2,docker,amazon-elastic-beanstalk,Amazon Web Services,Amazon Ec2,Docker,Amazon Elastic Beanstalk,我试图在运行在多容器AWS EC2实例中的两个Docker容器之间共享数据 通常,在运行容器时,我会将卷指定为命令标志,即:docker run-p80:80-p443:443--link Widget:Widget--volumes from Widget--name Nginx1-d Nginx1,以共享从Widget到Nginx1的卷 然而,由于Elastic Beanstalk要求您在dockerrun.aws.json文件中指定Docker配置,然后在内部处理运行Docker容器的问题

我试图在运行在多容器AWS EC2实例中的两个Docker容器之间共享数据

通常,在运行容器时,我会将卷指定为命令标志,即:
docker run-p80:80-p443:443--link Widget:Widget--volumes from Widget--name Nginx1-d Nginx1
,以共享从Widget到Nginx1的卷

然而,由于Elastic Beanstalk要求您在
dockerrun.aws.json
文件中指定Docker配置,然后在内部处理运行Docker容器的问题,因此我无法弄清楚如何在容器之间共享数据卷

注意,我并没有试图将EC2实例中的数据共享到Docker容器中——这部分似乎工作正常;相反,我希望直接将数据从一个Docker容器共享到另一个容器。我知道docker容器卷与主机共享在
“/var/lib/docker/volumes/fac362…80535”
等处,但由于此位置不是静态的,我不知道如何在
dockrun.aws.json
文件中引用它

是否有人找到了解决方案或解决方法

更多关于dockerrun.aws.json的信息以及配置EB在这里寻找的信息:

谢谢

从中我发现:

您可以在容器上定义一个或多个卷,然后使用 不同容器定义中的volumesFrom参数(在 相同的任务)以从位于的sourceContainer装载所有卷 它们最初定义的装载点

volumesFrom参数适用于任务中定义的卷 定义,以及使用Dockerfile内置到图像中的定义


要完成所需操作,需要正确使用
volumesFrom
参数。您需要确保为共享其内部数据的容器使用
volume
命令公开卷

下面是一个Dockerfile示例,我使用它捆绑了一些静态文件,以便通过Web服务器提供服务:

FROM tianon/true
COPY build/ /opt/static
VOLUME ["/opt/static"]
现在,
dockrun.aws.json
的相关部分:

{
    "name": "staticfiles",
    "image": "mystaticcontainer",
    "essential": false,
    "memory": "16"
},
{
    "name": "webserver,
    ...
    "volumesFrom" : [
        {
            "sourceContainer": "staticfiles"
        }
    ]
}

请注意,Dockerrun.aws.json文件的根目录中不需要任何
条目,因为卷仅在两个容器之间共享,而不在主机上持久化。在保存要共享的卷的容器定义中,您也不需要任何特定的
装入点
键,因为具有
volumesFrom
的容器会自动从引用的容器中拾取所有卷。在此示例中,
staticfiles
容器中的
/opt/static
中的所有文件也将可用于位于同一位置的
webserver
容器。

您需要在dockrun.aws.json文件中指定
dockerVolumeConfiguration
。我们就是这样做到的。基本上是推送到ECS

下面是我的.json文件的一个片段

 "volumes": [
    {
      "name": "shared-data",
      "dockerVolumeConfiguration": {
          "scope": "shared",
          "driver": "local",
          "autoprovision": false
      }
    } 
  ],

  "containerDefinitions": [
    {
      "name": "api",
      "image": "account.dkr.ecr.us-west-2.amazonaws.com/api:latest",
      "essential": true,
      "memory": 128,
      "portMappings": [
        {
          "hostPort": 5000,
          "containerPort": 3050
        }
      ],
      "mountPoints": [
        {
          "sourceVolume": "shared-data",
          "containerPath": "/var/area_data"
        }
      ]
    },

我这里有同样的问题。希望使用此功能在rails容器和nginx容器之间共享已编译的资产。Kyle可能会进行链接,但安装后文件夹为空。ECS服务似乎删除了
VOLUME
文件夹中的所有数据:(Hrmm是的,我觉得我们可能尝试了volumesFrom,但没有成功。我使用了这种“类型”单独使用docker引擎进行安装,效果非常好。也许我们在AWS论坛上运气不错?或者这是预期的行为。Kyle,我在AWS论坛上发布了一个问题。请注意,您不需要“容器定义”旁边的“卷”部分。文档中的示例实际上会清除数据容器中的卷。仅指定volumesFrom就足够了。这是否意味着staticfiles容器应始终处于启动和运行状态?