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

我试图在多容器 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文件中指定Dockerconfiguration,然后在内部处理运行Docker容器,所以我一直无法弄清楚如何在容器之间共享数据卷。

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

有没有人find解决scheme或解决方法?

dockerrun.aws.json和configurationEB在这里寻找更多信息: http : dockerrun.aws.json

谢谢!

为了完成你想要的,你需要正确地使用volumesFrom参数。 您需要确保使用共享其内部数据的容器的VOLUME命令来显示卷。

下面是一个Dockerfile的例子,我用它来捆绑一些静态文件,通过web服务器进行服务:

 FROM tianon/true COPY build/ /opt/static VOLUME ["/opt/static"] 

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

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

请注意,Dockerrun.aws.json文件的根目录中不需要任何volumes条目,因为卷只在两个容器之间共享,并且不会保留在主机上。 在容器定义中,您也不需要任何特定的mountPoints键来保存要共享的卷,因为具有volumesFrom的容器自动从所引用的容器中拾取所有卷。 在此示例中, /opt/static容器容器中的/opt/static中的所有文件也将可用于相同位置的webserver容器。

从AWS文档,我发现这一点:

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

volumesFrom参数适用于任务定义中定义的卷以及使用Dockerfile构build到图像中的卷。