私は 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 に接続できません。Admin Console で見つけたインスタンスのパブリック (エフェメラル) IP アドレスを使用し、その後に ::5900 (TightVNC には何らかの理由で 2 つのコロンが必要です) を使用します。サーバーが接続を拒否したというメッセージが表示されます。実際、ポート 5900 に telnet で接続しようとすると、ブロックされます。
次に、コンテナーマシンに SSH で接続し、コンテナーのポートを wget xxx.xxx.xxx.xxx:5900 でテストすると、接続が確立されます。したがって、コンテナがポート 5900 での接続を受け入れていないように思えます。ポートを開き、VNC クライアントを Docker コンテナーにルーティングすることは可能ですか? どんな助けでも感謝します。
Compute Engine を使用できない理由。 マネージド VM の代わりに Google の Compute Engine 環境を使用することに関するいくつかのコメントを差し控えるためです。コードでデータストアとタスク キューを多用しています。それらが Compute Engine で実行 (またはネイティブ/効率的に実行) できるとは思いません。しかし、私はそれを別の質問として提起するかもしれません.
更新:コメントの Paul ごとに... docker 用語のいくつかを学んだこと: Google の環境でコンテナーにポートを公開できますか?