【问题标题】:Why is my Docker instance running in Compute Engine not able to be accessed outside of the container?为什么无法在容器外访问我在 Compute Engine 中运行的 Docker 实例?
【发布时间】:2019-12-15 09:02:58
【问题描述】:

我已成功将我的应用程序的 docker 映像上传到 GCR,用它制作了一个 GCE 实例,启用了 http 转发,并且在 SSH 进入 GCE 实例后做了一个 'docker pull' + 'docker run -d -p 8888:8888' 但我无法通过外部 IP + 端口(8888)访问应用程序。 然后我尝试通过 SSH 连接到 GCE 实例,然后运行 'docker exec -it curl -v http://localhost:8080/healthCheck' 我可以访问我的应用程序。

我已经尝试通过 SSH 连接到我的 GCE 实例并运行 'docker exec -it curl -v http://localhost:8080/healthCheck' 所以我知道应用程序运行良好,只是缺少将其映射到外部 IP 的东西?我还添加了防火墙规则(8888 和 8080),我看到它们已映射到 GCE 实例。

预期:一旦我从 SSH 运行 'docker run -d -p 8888:8888' 到 GCE 实例,应用程序也应该可以使用 GCE 实例的 ExternalIP + 端口访问。 实际:在浏览器中获取“无法访问站点”,使用 curl 时回复为空。

【问题讨论】:

  • 它在您本地系统上的 Docker 中工作吗?这通常是由于 (a) 容器内的进程没有监听特殊的“所有接口” 0.0.0.0 地址,或者 (b) 防火墙设置(尤其是在云环境中可能不在主机上 per硒)。
  • 它可以在我的本地系统@DavidMaze 上运行
  • 您的防火墙规则是否与您想要的结果一致?
  • 我在防火墙规则上允许所有端口,它们适用于我网络中的所有实例...@Kolban
  • 如果在 GCE 实例上使用 lsof 或 netstat,是否表明端口 8888 有一个活动的侦听器?

标签: docker kubernetes google-cloud-platform google-compute-engine


【解决方案1】:

我认为您的 docker 命令是错误的。它应该是“docker run -d -p 8888:8080”,因为 -p 标志表明第一个数字将是主机端口,第二个数字是容器端口 [1]。根据您的 curl 命令成功,您的容器正在侦听 8080 端口。

您的应用程序现在应该使用 'http://[external IP]:8888/healthCheck' 或 https,不知道您是否使用 SSL/TLS。

[1]https://docs.docker.com/engine/reference/run/#expose-incoming-ports

【讨论】:

  • 就是这样。谢谢!
猜你喜欢
  • 2016-09-09
  • 2020-07-12
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2019-10-21
  • 2018-09-02
相关资源
最近更新 更多