docker - 为什么在容器外部无法访问在Compute Engine中运行的Docker实例?

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

我已成功将应用程序的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运行到“GCE实例”中运行了“docker run -d -p 8888:8888”,该应用程序也应该可以通过使用GCE实例的ExternalIP +端口进行访问。
实际:在使用curl时,在浏览器中获取“无法访问网站”和空的答复。

最佳答案

我认为您的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

关于docker - 为什么在容器外部无法访问在Compute Engine中运行的Docker实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57399249/

相关文章:

java - Google App Engine 无法启动 Dataflow 作业

docker - Docker的Apache Marmotta导入器

kubernetes - Helm 推荐方法中的持久卷、声明和副本

java - 在 Google App Engine 上返回空列表在开发服务器上和部署时的行为有所不同

google-cloud-platform - 是否可以通过 API 关闭 stackdriver 创建的事件?

service - 在kubernetes中,将服务路由到Pod的请求不再服务于该端口但仍然有效

dockerd vs docker-containerd vs docker-runc vs docker-containerd-ctr vs docker-containerd-shim

laravel - 将 Laravel .env 变量传递给 Dockerfile

shell - 当我在Docker容器中执行Shell脚本时,错误是 “No such file or directory”

azure - 使用公共(public) IP 在 Azure 上运行的 Kubernetes 服务。 DNS 名称是什么?