【问题标题】:Can not access Tomcat in Docker on EC2 by public IP无法通过公共 IP 在 EC2 上的 Docker 中访问 Tomcat
【发布时间】:2020-09-29 20:57:20
【问题描述】:

我通过命令从 DockerHub 在 AWS EC2 实例上运行 Tomcat 映像

 docker run -d -p 8000:8080 tomcat

容器正常启动

ubuntu@ip-172-31-39-118:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
cbb1ac139d13        tomcat              "catalina.sh run"   21 minutes ago      Up 21 minutes       0.0.0.0:8000->8080/tcp   vigilant_poitras

我的实例公网 IP 地址是 3.14.3.30 我尝试通过 Chrome 访问 http://3.14.3.30:8000/,但访问被拒绝,超时已过期。 AWS 中的安全组设置为 0.0.0.0/0 用于源和目标 我的 Wondows 上的防火墙已关闭。 请帮忙解决问题!!

【问题讨论】:

  • 您针对包含 0.0.0.0/0 的规则针对 AWS 安全组打开了哪些端口?此规则的屏幕截图会有所帮助。
  • - 检查 Docker 主机是否能够使用私有 IP 访问该站点。像“curl 172-31-39-118:8000 .... - 也使用 Docker 容器 IP 进行卷曲...您可以使用 docker inspect 获取容器的 IP 地址。http://:8080 ....这样,您可以缩小 AWS Sec Group/NACL 问题或与 Docker Container/Docker Host 相关的问题。
  • 我的安全规则是:inbond:端口范围协议源安全组 22 TCP 0.0.0.0/0 launch-wizard-2 Outbond 端口范围协议目标安全组全部全部 0.0.0.0/0 launch-wizard- 2
  • 对于 giridhar.j - 我尝试了任何地址,包括容器公共 IP 和容器网关,但结果都是一样的!

标签: amazon-web-services docker tomcat amazon-ec2


【解决方案1】:

根据cmets,添加的入站规则是

22 TCP 0.0.0.0/0 - 这是通过 ssh 连接到服务器。

你还没有打开 8000 端口。将 8000 端口的入站规则打开为 TCP。

【讨论】:

    【解决方案2】:

    @MichaelZal - 有两个问题。

    问题 1.) 您无法在本地访问该页面。你必须解决这个问题。 我运行了相同的 tomcat 映像,这就是您应该能够看到该页面的方式。

    • 运行 curl http://localhost:8000(注意:8000 端口)

      [ec2-user@ip-172-31-93-30 ~]$ curl http://localhost:8000

      HTTP 状态 404 - 未找到

    • 运行 docker 检查 {Your_Container_ID} | grep "IP地址"

    • 运行 curl http://{Container-IP}:8080(注意:8080 端口....)

    我看到您最后评论说您尝试了所有 IP。容器网关不是正确的 IP。可以肯定的是,我正在提供有关如何检查容器 ip 的信息。

    [ec2-user@ip-172-31-93-30 ~]$ docker inspect c44c5d8067b0 | grep "IPAddress"
                "SecondaryIPAddresses": null,
                "IPAddress": "172.17.0.2",
                        "IPAddress": "172.17.0.2",
    [ec2-user@ip-172-31-93-30 ~]$
    
    [ec2-user@ip-172-31-93-30 ~]$ curl http://172.17.0.2:8080
    <!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><
    

    如果这不起作用,那么您必须检查您的容器日志,以确定 tomcat 是否正确启动以及您是否有以下类型的日志消息。它很少会出错。我运行了与您运行的相同的 docker 命令,它应该可以工作。

    • 运行 docker 日志 {Your_Container_ID}

      [ec2-user@ip-172-31-93-30 ~]$ docker logs c44c5d8067b0 .....

      30-Sep-2020 16:19:58.554 INFO [main] org.apache.catalina.core.StandardService.startInternal 启动服务 [Catalina] 2020 年 9 月 30 日 16:19:58.555 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 启动 Servlet 引擎:[Apache Tomcat/9.0.38] 2020 年 9 月 30 日 16:19:58.573 INFO [main] org.apache.coyote.AbstractProtocol.start 启动 ProtocolHandler ["http-nio-8080"] 2020 年 9 月 30 日 16:19:58.612 INFO [main] org.apache.catalina.startup.Catalina.start 服务器在 [196] 毫秒内启动

    问题 2.) 网络访问不存在。有两个地方可以阻止它。 NACL 和安全组。

    很明显,安全组没有必要的规则。下面需要补充。 类型:自定义 TCP 端口:8000 来源:0.0.0.0/0(这适用于整个互联网,或者您可以选择任何您打算提供访问权限的特定 IP)

    如果上述所有问题都已修复和测试,但网站仍然无法正常工作,我们必须检查 NACL。

    如果有问题,请发布这些。

    • CURL 输出/错误
    • 容器日志

    【讨论】:

      猜你喜欢
      • 2012-05-02
      • 2021-07-06
      • 2021-03-01
      • 2020-11-03
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 2020-12-10
      • 2019-12-23
      相关资源
      最近更新 更多