考虑 URL 重定向:如何在远程服务器上同一 docker 网络中的不同容器中使用 Web 应用程序 运行 的 GUI?
Considering URL redirections: How to use GUIs of web applications running in different containers within the same docker network on a remote server?
我觉得我忽略了一些明显的东西,因为我的 solutions/ideas 到目前为止看起来太麻烦了。我一直在深入寻找一个好的解决方案,但到目前为止没有成功 - 可能是因为我不知道要寻找什么。
问题:
考虑到这些容器之间的 URL 重定向,您如何与远程服务器上不同容器(在同一 Docker 网络中)中的 Web 服务器 运行 的图形界面进行交互?
初始情况:
我的 docker 主机 (Azure-VM) 上有两个容器(一个 Flask Web 应用程序和一个带有 OpenAM 运行 的 Tomcat 服务器)运行。
- 在虚拟机上,我可以通过我打开的端口输出两个容器的内容。
- 使用 ssh 端口转发,我可以在本地计算机上与两个容器的图形组件进行交互。
- 两个容器都是使用相同的 docker-compose 创建的,无需额外的网络设置即可通过其域名访问。
到目前为止,我已经使用 ssh 端口转发在我的本地计算机上配置了 OpenAM。
问题:
Flask 网络应用程序通过其在 docker-compose 中定义的域名引用 OpenAM,反之亦然。我将 Flask 容器的端口转发到我的本地机器。 Flask 应用程序是 运行,我可以在我的浏览器中与它交互。
当我在本地计算机上从 Flask 重定向到 OpenAM 时,系统就会失败,因为 Flask 使用的 OpenAM 容器的引用特定于 Docker 网络。此外,OpenAM 容器的端口也不同。
换句话说,两个网络之间的路由是不存在的。
解决思路:
- 使用命令行工具在 VM 上执行请求。
- 使用带有自动执行请求的无头浏览器的容器。
- 使用网络设置 'Host' 并改为在 VM 上执行无头浏览器。
- 通过单个容器(类似于 VPN)路由所有请求并使用 ssh 端口转发。
简化的docker-撰写:
version: "3.4"
services:
openam:
image: openidentityplatform/openam
ports:
- 5001:8080
command: /usr/local/tomcat/bin/catalina.sh run
flask:
build: ./SimpleHTTPServer
ports:
- 5002:8000
command: python -m http.server 8000
Route all requests through a single container
- 这是正确的方法。
迄今为止我能找到的最佳解决方案。它不用于生产。但是,对于原型设计或者如果只是尝试使用容器来模拟服务器结构,这是一个简单的设置。
总体思路:
部署第三个 VNC 容器 运行 网络浏览器并将此第三个容器的端口转发到您的本地计算机。由于第三个容器是 docker 网络的一部分,它自然可以解析内部域名,并且本地计算机上的 VNC 安装使您能够与 GUI 进行交互。
接近
- 将 VNC 添加到原始问题的 docker-compose。
- 在服务器端和客户端启用 X11 转发。
- 使用 ssh 转发 VNC 容器的端口。
- 客户端安装VNC,开启新会话,输入预定义密码
- 试试吧。
循序渐进
- 将 VNC container (inspired by creack's post on Whosebug) 添加到原始问题的 docker-compose 文件中:
version: "3.4"
services:
openam:
image: openidentityplatform/openam
ports:
- 5001:8080
command: /usr/local/tomcat/bin/catalina.sh run
flask:
build: ./SimpleHTTPServer
ports:
- 5002:8000
command: python -m http.server 8000
firefoxVnc:
container_name: firefoxVnc
image: creack/firefox-vnc
ports:
- 5900:5900
environment:
- HOME=/
command: x11vnc -forever -usepw -create
- 运行 docker-组成:
docker-compose up
- 在服务器端和客户端启用 X11 转发。
- 在客户端
$ vim ~/.ssh/config
并添加以下行:
Host *
ForwardAgent yes
ForwardX11 yes
- 在服务器端 运行
$ vim /etc/ssh/sshd_config
并编辑以下行:
X11Forwarding yes
X11DisplayOffset 10
- 使用ssh转发VNC容器的端口
ssh -v -X -L 5900:localhost:5900 gw.example.com
- 确保包含 X11 的 -X 标志。 -v 标志仅用于调试。
- 在客户端安装VNC,开启新会话,输入预定义密码。
- 在本地计算机上安装 VNC 查看器
- 打开已安装的查看器并使用转发地址开始新会话localhost:59000
- 当提示输入密码
1234
时,它是在 VNC dicker 镜像的原始 Dockerfile 中设置的(参见上面链接的 creack 的 post)。
- 您现在可以在 VNC
localhost:5900
会话的浏览器中转到 openam:8080/openam/
或 apache:80
。
一个更好的解决方案,干净、直接,并且在 运行在不同虚拟机上运行部分应用程序时也能完美运行。
设置和使用 SSH SOCKS 隧道
对于 Google Chrome 和 macOS:
- 将您的网络设置设置为在 Dockerfile 或 docker-compose 中托管。
- 启动 SSH 隧道:
$ ssh -N -D 9090 [USER]@[SERVER_IP]
- 将 SwitchyOmega 代理插件添加到您的 Chrome 浏览器。
- 通过转到
New Profile > Proxy Profile
、单击 create
、输入与 ssh 命令相同的服务器 IP 和端口 9090
. 来配置 SwitchyOmega
- 打开一个新的终端tap然后运行:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--user-data-dir="$HOME/proxy-profile" \
--proxy-server="socks5://localhost:9090"
- 将打开一个新的 Crome 会话,您可以在其中简单地浏览 docker 应用程序。
参考 |当运行宁Linux或Windows |使用 Firefox(无需插件)
指南 How to Set up SSH SOCKS Tunnel for Private Browsing 解释了如何设置 SSH SOCKS 隧道 运行ning Mac、Windows 或 Linux 并使用 Google Chrome 或 Firefox。我只是参考了 macOS 和 Crome 的设置,以防 link 死掉。
我觉得我忽略了一些明显的东西,因为我的 solutions/ideas 到目前为止看起来太麻烦了。我一直在深入寻找一个好的解决方案,但到目前为止没有成功 - 可能是因为我不知道要寻找什么。
问题: 考虑到这些容器之间的 URL 重定向,您如何与远程服务器上不同容器(在同一 Docker 网络中)中的 Web 服务器 运行 的图形界面进行交互?
初始情况: 我的 docker 主机 (Azure-VM) 上有两个容器(一个 Flask Web 应用程序和一个带有 OpenAM 运行 的 Tomcat 服务器)运行。
- 在虚拟机上,我可以通过我打开的端口输出两个容器的内容。
- 使用 ssh 端口转发,我可以在本地计算机上与两个容器的图形组件进行交互。
- 两个容器都是使用相同的 docker-compose 创建的,无需额外的网络设置即可通过其域名访问。
到目前为止,我已经使用 ssh 端口转发在我的本地计算机上配置了 OpenAM。
问题: Flask 网络应用程序通过其在 docker-compose 中定义的域名引用 OpenAM,反之亦然。我将 Flask 容器的端口转发到我的本地机器。 Flask 应用程序是 运行,我可以在我的浏览器中与它交互。 当我在本地计算机上从 Flask 重定向到 OpenAM 时,系统就会失败,因为 Flask 使用的 OpenAM 容器的引用特定于 Docker 网络。此外,OpenAM 容器的端口也不同。 换句话说,两个网络之间的路由是不存在的。
解决思路:
- 使用命令行工具在 VM 上执行请求。
- 使用带有自动执行请求的无头浏览器的容器。
- 使用网络设置 'Host' 并改为在 VM 上执行无头浏览器。
- 通过单个容器(类似于 VPN)路由所有请求并使用 ssh 端口转发。
简化的docker-撰写:
version: "3.4"
services:
openam:
image: openidentityplatform/openam
ports:
- 5001:8080
command: /usr/local/tomcat/bin/catalina.sh run
flask:
build: ./SimpleHTTPServer
ports:
- 5002:8000
command: python -m http.server 8000
Route all requests through a single container
- 这是正确的方法。
迄今为止我能找到的最佳解决方案。它不用于生产。但是,对于原型设计或者如果只是尝试使用容器来模拟服务器结构,这是一个简单的设置。
总体思路: 部署第三个 VNC 容器 运行 网络浏览器并将此第三个容器的端口转发到您的本地计算机。由于第三个容器是 docker 网络的一部分,它自然可以解析内部域名,并且本地计算机上的 VNC 安装使您能够与 GUI 进行交互。
接近
- 将 VNC 添加到原始问题的 docker-compose。
- 在服务器端和客户端启用 X11 转发。
- 使用 ssh 转发 VNC 容器的端口。
- 客户端安装VNC,开启新会话,输入预定义密码
- 试试吧。
循序渐进
- 将 VNC container (inspired by creack's post on Whosebug) 添加到原始问题的 docker-compose 文件中:
version: "3.4"
services:
openam:
image: openidentityplatform/openam
ports:
- 5001:8080
command: /usr/local/tomcat/bin/catalina.sh run
flask:
build: ./SimpleHTTPServer
ports:
- 5002:8000
command: python -m http.server 8000
firefoxVnc:
container_name: firefoxVnc
image: creack/firefox-vnc
ports:
- 5900:5900
environment:
- HOME=/
command: x11vnc -forever -usepw -create
- 运行 docker-组成:
docker-compose up
- 在服务器端和客户端启用 X11 转发。
- 在客户端
$ vim ~/.ssh/config
并添加以下行:
Host *
ForwardAgent yes
ForwardX11 yes
- 在服务器端 运行
$ vim /etc/ssh/sshd_config
并编辑以下行:
X11Forwarding yes
X11DisplayOffset 10
- 使用ssh转发VNC容器的端口
ssh -v -X -L 5900:localhost:5900 gw.example.com
- 确保包含 X11 的 -X 标志。 -v 标志仅用于调试。
- 在客户端安装VNC,开启新会话,输入预定义密码。
- 在本地计算机上安装 VNC 查看器
- 打开已安装的查看器并使用转发地址开始新会话localhost:59000
- 当提示输入密码
1234
时,它是在 VNC dicker 镜像的原始 Dockerfile 中设置的(参见上面链接的 creack 的 post)。
- 您现在可以在 VNC
localhost:5900
会话的浏览器中转到openam:8080/openam/
或apache:80
。
一个更好的解决方案,干净、直接,并且在 运行在不同虚拟机上运行部分应用程序时也能完美运行。
设置和使用 SSH SOCKS 隧道
对于 Google Chrome 和 macOS:
- 将您的网络设置设置为在 Dockerfile 或 docker-compose 中托管。
- 启动 SSH 隧道:
$ ssh -N -D 9090 [USER]@[SERVER_IP]
- 将 SwitchyOmega 代理插件添加到您的 Chrome 浏览器。
- 通过转到
New Profile > Proxy Profile
、单击create
、输入与 ssh 命令相同的服务器 IP 和端口9090
. 来配置 SwitchyOmega
- 打开一个新的终端tap然后运行:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--user-data-dir="$HOME/proxy-profile" \
--proxy-server="socks5://localhost:9090"
- 将打开一个新的 Crome 会话,您可以在其中简单地浏览 docker 应用程序。
参考 |当运行宁Linux或Windows |使用 Firefox(无需插件)
指南 How to Set up SSH SOCKS Tunnel for Private Browsing 解释了如何设置 SSH SOCKS 隧道 运行ning Mac、Windows 或 Linux 并使用 Google Chrome 或 Firefox。我只是参考了 macOS 和 Crome 的设置,以防 link 死掉。