Elastic Beanstalk 上的多容器 Docker 环境中的容器连接被拒绝
Posted
技术标签:
【中文标题】Elastic Beanstalk 上的多容器 Docker 环境中的容器连接被拒绝【英文标题】:Connection refused for container in multicontainer Docker environment on Elastic Beanstalk 【发布时间】:2020-08-28 23:59:05 【问题描述】:我想在 Elastic beanstalk 上部署一个 tomcat 容器作为多容器环境的一部分。
在本地一切正常
docker run -it --rm -p 8888:8080 tomcat:9.0
在浏览器中打开http://localhost:8888/
时,会出现带有页脚Apache Tomcat/9.0.34
的HTTP 状态404,这是预期的,因为我使用的是不附带任何服务的官方图像(据我所知)。
现在我想使用这个容器作为 Elastic beanstalk 集群中的接入点。
我选择 Create Application
并提供我的 Dockerrun.aws.json¹:
"AWSEBDockerrunVersion": 2,
"volumes": [],
"containerDefinitions": [
"name": "vanilla-tomcat",
"image": "tomcat:9.0",
"essential": "true",
"memory": 128,
"portMappings": [
"hostPort": 8888,
"containerPort": 8080
],
"mountPoints": []
]
健康是绿色的,没有错误,但是当我调用地址时,例如
与curl http://vanillatomcat-env.eba-abc.eu-central-1.elasticbeanstalk.com/
我得到curl: (7) Failed to connect to vanillatomcat-env.eba-xy.eu-central-1.elasticbeanstalk.com port 80: Connection refused
与curl http://vanillatomcat-env.eba-abc.eu-central-1.elasticbeanstalk.com:8888
我得到Connection timed out
。
安全组有一个入站规则:
Type Protocol Port range Source Description - optional
HTTP TCP 80 0.0.0.0/0 -
我需要配置什么才能访问我的容器?
¹我故意只提供一个容器以保持简单,但其他环境不是解决方案,它必须是多容器环境!
进展
-
根据 Marcin 的建议(我对 a 的理解),我在 Configuration -> Software -> Environment properties 下将
aws:elasticbeanstalk:environment:process:default:Port
设置为不同的值:
但这并没有改变调用address
或address:1234
的任何东西
-
我用烧瓶进一步尝试了同样的事情,图像是
poroko/flask-demo-app
,containerPort
是 5000。它再次在本地工作(docker run -it --rm -p 8888:5000 poroko/flask-demo-app
),但不适用于弹性豆茎,所以我认为这个问题不是特定于 tomcat 而是由于设置。
【问题讨论】:
查看我的 eb ecs docker 中的内容,我认为您必须使用 aws:elasticbeanstalk:environment:process:default 调整端口。您也可以先通过控制台检查它是否有帮助,然后再将其添加到.ebextensions
文件。
【参考方案1】:
设置"hostPort": 80
为我解决了这个问题。
【讨论】:
以上是关于Elastic Beanstalk 上的多容器 Docker 环境中的容器连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
Elastic Beanstalk 上的 Tomcat - Tomcat 线程中的多线程
AWS Elastic Beanstalk 上的 Docker 端口映射
Elastic Beanstalk 多容器 Docker 环境变量
Elastic Beanstalk 上的 NodeJS 多容器 Docker