【发布时间】:2016-05-24 05:28:12
【问题描述】:
我使用的是 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 需要两个冒号)。我收到一条消息,服务器拒绝连接。事实上,当我尝试远程登录到端口 5900 时,它被阻止了。
接下来我通过 SSH 连接到 container 机器,当我使用 wget xxx.xxx.xxx.xxx:5900 测试容器上的端口时,我得到了连接。所以在我看来,容器不接受端口 5900 上的连接。我说对了吗?是否可以打开端口并将我的 VNC 客户端路由到 docker 容器中?任何帮助表示赞赏。
为什么我不能使用 Compute Engine。 只是为了抢占一些 cmet 使用 google 的 Compute Engine 环境而不是托管 VM。我在代码中大量使用了数据存储和任务队列。我不认为这些可以在 Compute Engine 上运行(或本机/高效运行)。但我可能会将其作为一个单独的问题提出。
更新: Per Paul 在 cmets... 学习了一些 docker 术语:我可以在 Google 环境中的容器上发布端口吗?
【问题讨论】:
-
我相信暴露只会将端口暴露给其他 docker 实例。尝试发布它。 stackoverflow.com/questions/22111060/…
-
伟大的参考保罗。我认为这是我的问题——我无法控制“docker run”参数来放入“-p”标志。该命令由 Google 环境执行(因此托管 vm 中的“托管”)。
标签: google-app-engine docker vnc managed-vm google-managed-vm