如何在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到图像中的卷。
- 在AWS beanstalk下将特定的EBS卷挂载到Docker
- 弹性beanstalk泊坞窗应用程序不部署时更新
- AWS Elastic BeanStalk Docker根文件系统切换为只读
- Dockerfile与AWS Elastic Beanstalk错误; 否则工作,有区别?
- 在Elastic Beanstalk上设置Docker容器主机名
- Elastic Beanstalk MultiContainer Docker环境variables
- docker错误 – “jq:错误:无法遍历空”
- 如何设置运行Django的AWS Elastic Beanstalk Docker平台?
- 弹性beanstalk泊坞窗应用程序无法连接到MySQL