我有一个 war 文件部署为 Docker
容器 linux ec2
.但是当我尝试点击 http://ec2-elastic-ip:8080/AppName
, 我没有得到任何回应。
我有所有的security group
为两者设置入站规则 http
和 https
.所以这不是问题。
调试
我尝试通过 ssh-ing
调试Linux实例。尝试过的命令 curl localhost:8080
,这是响应:
curl: (7) Failed to connect to localhost port 8080: Connection refused
尝试使用 127.0.0.1:8080
但同样的 react 。
接下来我要做的是列出 Docker 容器:docker ps
.我得到:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<ID> <ecr>.amazonaws.com/<my>-registry:2019-05-16.12-17-02 "catalina.sh run" 24 minutes ago Up 24 minutes 0.0.0.0:32772->8080/tcp ecs-app-24-name
现在,我使用 docker exec -it <name> /bin/bash
连接到这个容器并尝试检查 tomcat 日志,它清楚地表明我的应用程序 war 已经存在并且 tomcat 已经启动。
我曾尝试检查 docker-machine ip default
但这给了我错误:
Docker machine "default" does not exist. Use "docker-machine ls" to list machines. Use "docker-machine create" to add a new one.
现在卡住了。无法进一步调试。我期望的结果是通过上面的 url 访问应用程序。
要做什么?是不是哪里做错了?
此外,值得一提的是,整个基础设施是通过 terraform
管理的.我首先创建基本图像,使用 DockerFile
将 war 复制到 webapps ,推送注册表镜像,最后做一个 terraform apply
应用任何更改。
最佳答案
确保 apache 正在监听 docker 容器内的所有 IP 地址,而不仅仅是本地主机。 IP 应该像 0.0.0.0。
如果任何服务在 docker 中运行并且只监听本地主机,则它只能在该容器内访问,而不能从主机访问。
也可以尝试用8080端口启动apache,将docker 8080端口与主机8080端口绑定(bind)
docker run apache -p 8080:8080
关于amazon-web-services - 无法连接到 Docker 容器 : Connection Refused,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56163183/