我正在使用Java,但这不一定是Java问题。谷歌的“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。我使用公共(临时)IP地址作为我在管理控制台中找到的实例,然后是:: 5900(由于某种原因,TightVNC需要两个冒号)。我收到服务器拒绝连接的消息。事实上,当我尝试telnet到5900端口时,它被阻止了。
接下来我通过SSH进入容器机器,当我用wget xxx.xxx.xxx.xxx:5900测试容器上的端口时,我得到一个连接。因此在我看来,容器不接受端口5900上的连接。我是否正确?是否可以打开端口并将我的VNC客户端路由到docker容器中?任何帮助表示赞赏。
为什么我不能使用计算引擎。只是为了抢占一些关于使用谷歌的计算引擎环境而不是托管虚拟机的评论。我在代码中大量使用数据存储区和任务队列。我不认为那些可以在Compute Engine上运行(或本地/高效运行)。但我可以将其视为一个单独的问题。
更新:Per Paul在评论中......了解了一些码头工具术语:我可以在Google环境中的容器上发布端口吗?
答案 0 :(得分:1)
出于好奇 - 为什么要尝试VNC进入你的实例?如果它仅用于管理目的,您可以SSH到托管VM实例。
据说 - 您可以使用network / forwarded_ports配置将流量从VM路由到应用程序容器:
network:
forwarded_ports:
- 5900
instance_tag: vnc
将其放入app.yaml,然后重新部署您的应用。您还需要打开防火墙中的端口(如果您打算从公共互联网访问此端口):
gcloud compute firewall-rules create default-allow-vnc \
--allow tcp:5900 \
--target-tags vnc \
--description "Allow vnc traffic on port 5900"
希望这有帮助!