可能? 如何在Google托pipe虚拟机环境中设置VNC

我使用的是Java,但这不一定是Java的问题。 Google的“java-compat”图片是Debian(3.16.7-ckt20-1 + deb8u3〜bpo70 + 1(2016-01-19))。

这是我的Dockerfile:

FROM gcr.io/google_appengine/java-compat RUN apt-get -qqy update && apt-get qqy install curl xvfb x11vnc RUN mkdir -p ~/.vnc RUN x11vnc -storepasswd xxxxxxxx ~/.vnc/passwd EXPOSE 5900 ADD . /app 

在pipe理控制台中,我创build了一个防火墙规则来打开5900.最后,我使用以下命令在“_ah / start”启动钩子中调用vnc服务器本身:

 x11vnc -forever -usepw -create 

所有似乎安装正确,但我无法连接TightVNC。 我在pipe理控制台中使用公用(短暂)IP地址,后跟:5900(由于某种原因,TightVNC需要两个冒号)。 我收到一条消息,说服务器拒绝了连接。 实际上,当我尝试telnet到5900端口时,它被阻止。

接下来,我SSH进入容器机器,当我用wget xxx.xxx.xxx.xxx:5900testing容器上的端口时,我得到一个连接。 所以在我看来,集装箱不接受港口5900连接。我是否正确? 是否有可能打开端口和路由我的VNC客户端到docker集装箱? 任何帮助赞赏。

为什么我不能使用计算引擎。 只是为了抢占一些关于使用谷歌的计算引擎环境,而不是托pipe虚拟机的意见。 我大量使用我的代码中的数据存储和任务队列。 我不认为这些可以在计算引擎上运行(或者本地/有效地运行)。 但是我可以把它作为一个单独的问题提出来。

更新: Per Paul在评论中学到了一些docker术语:我可以在Google环境中的容器上发布一个端口吗?

出于好奇 – 你为什么要尝试VNC到你的实例? 如果仅用于pipe理目的,则可以将SSH连接到Managed VM实例。

如果可以,请使用SSH而不是VNC

前面已经说过 – 您可以使用network / forwarded_portsconfiguration将stream量从VM路由到应用程序容器:

 network: forwarded_ports: - 5900 instance_tag: vnc 

把它放在你的app.yaml中,然后重新部署你的应用程序。 您还需要在防火墙中打开端口(如果您打算通过公共Internet访问此端口):

 gcloud compute firewall-rules create default-allow-vnc \ --allow tcp:5900 \ --target-tags vnc \ --description "Allow vnc traffic on port 5900" 

希望这可以帮助!