在GCE VM上的Docker容器中的Node中编写的GRPC服务器-错误14

戴夫

将docker容器部署到GCE时,我无法建立连接。如果我在本地构建和运行docker容器,那么我没有任何问题。

我在Dockerfile中公开了端口50051,并将构建的映像部署到GCR。

我有一个Ubuntu 20.04LTS VM,已经安装了docker。

我尝试使用以下命令启动服务器

server.bindAsync('0.0.0.0:50051', grpcLibrary.ServerCredentials.createInsecure(), (error, port) => {
                try {
                    if (error)
                        reject(error);
                    server.start();
                    console.log('started on ' + port);
                    resolve(server);
                }
                catch (e) {
                    reject(e);
                }
            });

server.bindAsync('127.0.0.1:50051', grpcLibrary.ServerCredentials.createInsecure(), (error, port) => {
                try {
                    if (error)
                        reject(error);
                    server.start();
                    console.log('started on ' + port);
                    resolve(server);
                }
                catch (e) {
                    reject(e);
                }
            });

我正在使用以下命令运行容器 docker run -p 50051:50051 -it -d eu.gcr.io/myimage

VM上的IP表显示

sudo iptables -t nat -n -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:50051

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:50051 to:172.17.0.2:50051

docker ps 表演

CONTAINER ID        IMAGE                                                   COMMAND                  CREATED             STATUS              PORTS                      NAMES
4e32bdcae366        eu.gcr.io/myimage:latest   "docker-entrypoint.s…"   18 minutes ago      Up 18 minutes       0.0.0.0:50051->50051/tcp   youthful_wright

和ss -tulpn在容器中

ss -tulpn
Netid State      Recv-Q Send-Q                                                Local Address:Port                                                               Peer Address:Port              
tcp   LISTEN     0      511                                                               *:50051                                                                         *:*                   users:(("node",pid=1,fd=18))

我在VPC网络上也有以下防火墙规则

    
Name
Type
Targets
Filters
Protocols / ports
Action
Priority
Network
Logs
Hit count 
Last hit 
Insights
allow-grpc
Ingress
Apply to all    
IP ranges: 0.0.0.0/0
tcp:50051
Allow
1000
default
On  
85
2020-07-08 (11:33:00)

有谁知道为什么我无法从本地计算机连接或出现相同问题?

我觉得这是路由中的问题,但我无法解决

新安德森

我在其中一个实例中进行了复制,但没有任何问题。
我正在使用默认的nginx官方映像进行快速测试。
也许您缺少防火墙规则中的某些内容。除此之外,没有什么特别的事情要做。

我启动了一个虚拟的nginx图像。我选择发布:8095并将流量转发到容器内的:80:

docker run --name some-nginx -d -p 8095:80 nginx

我可以在本地到达它,而无需其他步骤:

# curl localhost:8095
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

尚无法从外部访问,因为没有防火墙规则允许进入我选择发布的端口的入口:

neo@neo-desktop:~$ telnet 34.107.14.223 80
Trying 34.107.14.223...
telnet: Unable to connect to remote host: Connection refused

我在实例上添加了网络标签:
在此处输入图片说明


然后创建一个防火墙规则,该规则允许进入已发布的端口,我在上一步中将规则应用于所有已将标签分配给实例的实例:
在此处输入图片说明

添加规则后,我可以在容器中运行的Nginx中顺利卷曲:

neo@neo-desktop:~$ curl 34.107.14.223:8095
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用外部IP连接到在Cloud GCE VM上运行的Docker容器中的HTTPS服务器

来自分类Dev

GCE上的Hadoop实例

来自分类Dev

Python线程错误:线程在GCE vm实例上以有限的资源运行

来自分类Dev

GCE中的免费SSL CERTS

来自分类Dev

Cloud Datalab中的身份验证错误:“ ImportError:没有名为gce的模块”

来自分类Dev

GCE Ubuntu 上的 DC/OS

来自分类Dev

在GCE Docker下运行Couchbase并获取有关最大文件数的错误

来自分类Dev

在Ubuntu 20.04上从GCE vm中的GCR拉取

来自分类Dev

无法SSH到GCE Docker容器

来自分类Dev

在GCE中将本地Web服务器部署为公共

来自分类Dev

从EC2实例移至GCE实例后php程序中的错误=无法访问文件:/ var / www / html /

来自分类Dev

kubectl如何检测GCE中的配置?

来自分类Dev

Ansible和GCE中的其他图像

来自分类Dev

限制GCE中可用的实例类型?

来自分类Dev

Ansible和GCE中的其他图像

来自分类Dev

混合使用GAE实例和GCE VM

来自分类Dev

无法将GCE VM迁移到GKE

来自分类Dev

无法使用 SSH 连接到 VM (GCE)

来自分类Dev

Kubernetes / GCE入口控制器失败

来自分类Dev

在 ansible playbook 中禁用 GCE vm 的公共 ip

来自分类Dev

CoreData:错误:(14)在设备上,不在模拟器中

来自分类Dev

CoreData:错误:(14)在设备上,不在模拟器中

来自分类Dev

如何在 GCE 上的 CentOS 中调整 xfs 的大小?

来自分类Dev

scalac:错误:intelliJ 14中的对象CharRef

来自分类Dev

在几个GCE节点上负载均衡许多服务

来自分类Dev

在Docker Windows上的Keycloak中添加领域时出现意外服务器错误

来自分类Dev

尝试调用包装在Docker容器中的Azure函数时发生内部服务器错误(500)

来自分类Dev

推荐在Docker容器内进行GCE服务帐户身份验证吗?

来自分类Dev

KVM作为GCE中的管理程序选择

Related 相关文章

  1. 1

    使用外部IP连接到在Cloud GCE VM上运行的Docker容器中的HTTPS服务器

  2. 2

    GCE上的Hadoop实例

  3. 3

    Python线程错误:线程在GCE vm实例上以有限的资源运行

  4. 4

    GCE中的免费SSL CERTS

  5. 5

    Cloud Datalab中的身份验证错误:“ ImportError:没有名为gce的模块”

  6. 6

    GCE Ubuntu 上的 DC/OS

  7. 7

    在GCE Docker下运行Couchbase并获取有关最大文件数的错误

  8. 8

    在Ubuntu 20.04上从GCE vm中的GCR拉取

  9. 9

    无法SSH到GCE Docker容器

  10. 10

    在GCE中将本地Web服务器部署为公共

  11. 11

    从EC2实例移至GCE实例后php程序中的错误=无法访问文件:/ var / www / html /

  12. 12

    kubectl如何检测GCE中的配置?

  13. 13

    Ansible和GCE中的其他图像

  14. 14

    限制GCE中可用的实例类型?

  15. 15

    Ansible和GCE中的其他图像

  16. 16

    混合使用GAE实例和GCE VM

  17. 17

    无法将GCE VM迁移到GKE

  18. 18

    无法使用 SSH 连接到 VM (GCE)

  19. 19

    Kubernetes / GCE入口控制器失败

  20. 20

    在 ansible playbook 中禁用 GCE vm 的公共 ip

  21. 21

    CoreData:错误:(14)在设备上,不在模拟器中

  22. 22

    CoreData:错误:(14)在设备上,不在模拟器中

  23. 23

    如何在 GCE 上的 CentOS 中调整 xfs 的大小?

  24. 24

    scalac:错误:intelliJ 14中的对象CharRef

  25. 25

    在几个GCE节点上负载均衡许多服务

  26. 26

    在Docker Windows上的Keycloak中添加领域时出现意外服务器错误

  27. 27

    尝试调用包装在Docker容器中的Azure函数时发生内部服务器错误(500)

  28. 28

    推荐在Docker容器内进行GCE服务帐户身份验证吗?

  29. 29

    KVM作为GCE中的管理程序选择

热门标签

归档