【发布时间】:2015-03-29 12:28:44
【问题描述】:
我有一个 Tomcat 7.0 webapp 在 AWS Elastic Beanstalk (EB) 上的 docker 容器中运行(我按照教程 here 操作)。
当我浏览到我的 EB 网址 myapplication.elasticbeanstalk.com 时,我得到了一个由 nginx 提供服务的 502 Bad Gateway。所以很明显我的 80 端口没有转发到我的容器。当我浏览到 myapplication.elasticbeanstalk.com:8888(我在 Dockerfile 中公开的另一个端口)时,连接被拒绝(ERR_CONNECTION_REFUSED)。于是我通过 SSH 连接到 AWS 实例并查看了 docker 日志,显示我的 Tomcat 服务器已成功启动,但显然还没有处理任何请求。
有人知道我的 8888 端口似乎没有转发到我的容器吗?
执行命令(在 AWS 实例上):
sudo docker ps -a
给予:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c353e236da7a aws_beanstalk/current-app:latest "catalina.sh run" 28 minutes ago Up 13 minutes 80/tcp, 8080/tcp, 8888/tcp sharp_leakey
显示 80、8080 和 8888 端口在 docker 容器上处于打开状态。
我的 Dockerfile 相当简单:
FROM tomcat:7.0
EXPOSE 8080
EXPOSE 8888
EXPOSE 80
而我的 Dockerrun.aws.json 文件是:
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "myusername/mycontainer-repo"
},
"Authentication": {
"Bucket": "mybucket",
"Key": "docker/.dockercfg"
},
"Ports": [
{
"ContainerPort": "8888"
}
]
}
有人知道我哪里出错了吗? 我什至不知道从哪里看这一点。
此外,我的实例的 AWS 安全组在端口 80、8080 和 8888 上打开。 任何建议将不胜感激!我在这里不知所措。
更新 1:
小更新,虽然我仍然遇到问题。 SSH 连接到我的 AWS EB 实例后,我检查了 Docker 容器以获取容器的 IP:
sudo docker inspect c353e236da7a
这给了我172.17.0.6的IP。
然后,我再次从 AWS 实例运行 curl 命令:
curl 172.17.0.6:8080/homepage
有效,并返回主页的 HTML!但是,curl 172.17.0.6:8888/homepage 不起作用(所以我不确定 "ContainerPort" : "8888" 在 Dockerrun.aws.json 文件中的含义)。
但是,我仍然有一个问题,为什么我的:8080 请求没有被转发到容器 Tomcat 网络服务器?如上所述,myapplication.elasticbeanstalk.com:8080/homepage 仍然收到拒绝连接 (ERR_CONNECTION_REFUSED)。
【问题讨论】:
标签: java tomcat amazon-web-services docker amazon-elastic-beanstalk