我要做的是双重的:一,在我的Elastic Beanstalk环境中运行Docker容器(最好是从Dockerfile创建,而不是从图像中提取),该环境已经在生产中运行Node应用程序。然后,将两者连接在一起,以便可以通过主机上的localhost访问我的服务器(在Docker容器上运行)。这样做的最终目标是允许两者通过TCP进行通信,但我认为这样做没有Dockeriziation。
从我看到的情况来看,AWS可以选择单容器Docker应用程序;然而,我不清楚它是用于仅在Docker上运行的应用程序,还是像我这样的场景。从我所读到的,我倾向于前者。
因此,我唯一的选择是在我的实例上手动安装Docker作为包,将其作为服务运行,然后从Dockerfile构建和运行吗?这似乎相当迂回,我相信我之前尝试过的只取得了有限的成功 - 但如果这是最好的道路,那就是我会尝试的!
感谢你们给我的任何帮助。将接受第一个给出可行解决方案的答案。
答案 0 :(得分:0)
在这种情况下,您需要在Docker容器中打包现有的Node应用程序,然后使用ELB Multi Container Docker environment在容器中运行这两个应用程序。
您需要将两个容器存储在私有或公共注册表中。要利用AWS Registry服务,请遵循this文章中的说明。然后,在您的EB环境的Dockerrun.aws.json文件中引用您的容器。
为了让容器能够相互通信,请包含"链接"到Dockerrun.aws.json文件中的其他容器:
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"name": "my-node-app",
"image": "registry:my-node-app",
"essential": true,
{
"name": "other-container",
"image": "registry:other-container",
"essential": true,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"my-node-app"
]
}
]
}
在这种情况下,Docker通过主机名" my-node-app"将您的节点容器暴露给您的其他容器。 (这是一个缩写的Dockerrun文件,只是fyi)