Возможный? Как настроить VNC в среде управляемых виртуальных машин Google

Я использую Java, но это не обязательно вопрос Java. Образом java-compat от Google является 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. И, наконец, я вызываю сам сервер vnc в хуке запуска "_ah/start" с помощью этой команды:

x11vnc -forever -usepw -create

Кажется, все настроено правильно, но я не могу подключиться к TightVNC. Я использую общедоступный (эфемерный) IP-адрес для экземпляра, который я нахожу в консоли администратора, за которым следует::5900 (TightVNC по каким-то причинам требуется два двоеточия). Я получаю сообщение, что сервер отказал в соединении. И действительно, когда я пытаюсь подключиться к порту 5900, он блокируется.

Затем я подключаю SSH к машине- контейнеру, и когда я тестирую порт на контейнере с помощью wget xxx.xxx.xxx.xxx:5900, я получаю соединение. Таким образом, мне кажется, что контейнер не принимает соединения через порт 5900. Я правильно понял? Можно ли открыть порты и направить мой VNC-клиент в докер-контейнер? Любая помощь приветствуется.

Почему я не могу использовать Compute Engine. Просто чтобы выгрузить некоторые комментарии об использовании среды Google Compute Engine вместо управляемых виртуальных машин. Я интенсивно использую хранилище данных и очереди задач в своем коде. Я не думаю, что они могут работать (или работать нативно / эффективно) на Compute Engine. Но я могу представить это как отдельный вопрос.

Обновление: Пер Пол в комментариях... изучив некоторые термины докера: Могу ли я опубликовать порт на контейнере в среде Google?

1 ответ

Решение

Из любопытства - почему вы пытаетесь использовать VNC в своих инстансах? Если это только для целей управления, вы можете использовать SSH в экземплярах управляемых виртуальных машин.

Используйте SSH вместо VNC, если можете

При этом вы можете использовать конфигурацию network/forwarded_ports для маршрутизации трафика от виртуальной машины к контейнеру приложения:

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"

Надеюсь это поможет!

Другие вопросы по тегам