可能的?如何在 Google 托管 VM 环境中设置 VNC
Possible? How to setup VNC in a Google Managed VM Environment
我正在使用 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
我在管理控制台中创建了一条防火墙规则来打开 5900。最后我在“_ah/start”启动挂钩中使用以下命令调用 vnc 服务器本身:
x11vnc -forever -usepw -create
一切似乎都已正确设置,但我无法连接到 TightVNC。我对在管理控制台中找到的实例使用 public(临时)IP 地址,后跟 ::5900(出于某种原因,TightVNC 需要两个冒号)。我收到服务器拒绝连接的消息。事实上,当我尝试远程登录到端口 5900 时,它被阻止了。
接下来,我通过 SSH 进入 container 机器,当我使用 wget xxx.xxx.xxx.xxx:5900 测试容器上的端口时,我获得了连接。所以在我看来容器不接受端口 5900 上的连接。我做对了吗?是否可以打开端口并将我的 VNC 客户端路由到 docker 容器中?任何帮助表示赞赏。
为什么我不能使用 Compute Engine。 只是抢占一些关于使用 google 的 Compute Engine 环境而不是托管 VM 的评论。我在我的代码中大量使用数据存储和任务队列。我不认为那些可以在 Compute Engine 上 运行(或 运行 natively/efficiently)。但我可以将其作为一个单独的问题提出。
更新: Per Paul 在评论中...学习了一些 docker 术语:我可以在 [=40= 中的容器上发布一个端口吗? ]的环境?
出于好奇 - 为什么要尝试将 VNC 连接到您的实例中?如果只是出于管理目的,您可以通过 SSH 连接到托管 VM 实例。
话虽如此 - 您可以使用 network/forwarded_ports 配置将流量从 VM 路由到应用程序容器:
network:
forwarded_ports:
- 5900
instance_tag: vnc
将其放入您的 app.yaml,然后重新部署您的应用。您还需要在防火墙中打开端口(如果您打算从 public 互联网访问此端口):
gcloud compute firewall-rules create default-allow-vnc \
--allow tcp:5900 \
--target-tags vnc \
--description "Allow vnc traffic on port 5900"
希望对您有所帮助!
我正在使用 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
我在管理控制台中创建了一条防火墙规则来打开 5900。最后我在“_ah/start”启动挂钩中使用以下命令调用 vnc 服务器本身:
x11vnc -forever -usepw -create
一切似乎都已正确设置,但我无法连接到 TightVNC。我对在管理控制台中找到的实例使用 public(临时)IP 地址,后跟 ::5900(出于某种原因,TightVNC 需要两个冒号)。我收到服务器拒绝连接的消息。事实上,当我尝试远程登录到端口 5900 时,它被阻止了。
接下来,我通过 SSH 进入 container 机器,当我使用 wget xxx.xxx.xxx.xxx:5900 测试容器上的端口时,我获得了连接。所以在我看来容器不接受端口 5900 上的连接。我做对了吗?是否可以打开端口并将我的 VNC 客户端路由到 docker 容器中?任何帮助表示赞赏。
为什么我不能使用 Compute Engine。 只是抢占一些关于使用 google 的 Compute Engine 环境而不是托管 VM 的评论。我在我的代码中大量使用数据存储和任务队列。我不认为那些可以在 Compute Engine 上 运行(或 运行 natively/efficiently)。但我可以将其作为一个单独的问题提出。
更新: Per Paul 在评论中...学习了一些 docker 术语:我可以在 [=40= 中的容器上发布一个端口吗? ]的环境?
出于好奇 - 为什么要尝试将 VNC 连接到您的实例中?如果只是出于管理目的,您可以通过 SSH 连接到托管 VM 实例。
话虽如此 - 您可以使用 network/forwarded_ports 配置将流量从 VM 路由到应用程序容器:
network:
forwarded_ports:
- 5900
instance_tag: vnc
将其放入您的 app.yaml,然后重新部署您的应用。您还需要在防火墙中打开端口(如果您打算从 public 互联网访问此端口):
gcloud compute firewall-rules create default-allow-vnc \
--allow tcp:5900 \
--target-tags vnc \
--description "Allow vnc traffic on port 5900"
希望对您有所帮助!