如何在Elastic Beanstalk应用程序中共享Docker容器之间的卷?

Kyl*_*dha 4 amazon-ec2 amazon-web-services docker amazon-elastic-beanstalk

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

通常情况下,我会在运行容器时将音量指定为命令标志,即:docker run -p 80:80 -p 443: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"等共享,但由于这个位置不是静态的,我不知道如何在dockerrun.aws.json文件中引用它.

有没有人找到解决方案或解决方法?

更多信息dockerrun.aws.json和配置EB在这里寻找:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html

谢谢!

eli*_*hud 8

要完成您想要的任务,您需要volumesFrom正确使用该参数.您需要确保使用VOLUME命令公开卷,以便容器共享其内部数据.

这是一个示例Dockerfile,我用它来捆绑一些静态文件,通过网络服务器提供服务:

FROM tianon/true
COPY build/ /opt/static
VOLUME ["/opt/static"]
Run Code Online (Sandbox Code Playgroud)

现在相关部分Dockerrun.aws.json:

{
    "name": "staticfiles",
    "image": "mystaticcontainer",
    "essential": false,
    "memory": "16"
},
{
    "name": "webserver,
    ...
    "volumesFrom" : [
        {
            "sourceContainer": "staticfiles"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要volumesDockerrun.aws.json文件根目录中的任何条目,因为该卷仅在两个容器之间共享,而不是在主机上保留.您还不需要mountPoints容纳共享卷的容器定义中的任何特定键,因为容器会volumesFrom自动从引用的容器中获取所有卷.在此示例中,容器/opt/static中的所有文件staticfiles也可用于webserver同一位置的容器.


bil*_*y91 2

AWS 文档中我发现了这一点:

您可以在一个容器上定义一个或多个卷,然后在不同的容器定义(同一任务内)中使用volumesFrom 参数,将sourceContainer 中的所有卷挂载到其最初定义的挂载点。

VolumeFrom 参数适用于任务定义中定义的卷以及使用 Dockerfile 内置到映像中的卷。