Возможный? Как настроить 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 в экземплярах управляемых виртуальных машин.
При этом вы можете использовать конфигурацию 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"
Надеюсь это поможет!