首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >考虑URL重定向:如何使用运行在远程服务器上同一个码头网络中不同容器中的web应用程序的GUI?

考虑URL重定向:如何使用运行在远程服务器上同一个码头网络中不同容器中的web应用程序的GUI?
EN

Stack Overflow用户
提问于 2020-12-09 15:48:46
回答 3查看 247关注 0票数 2

我觉得我忽略了一些显而易见的事情,因为到目前为止,我的解决方案/想法似乎太麻烦了。我一直在努力寻找一个好的解决方案,但到目前为止没有成功--可能是因为我不知道该找什么。

问题:如何与远程服务器上运行在不同容器(同一码头网络内)的web服务器的图形界面进行交互,给出这些容器之间的URL重定向?

初始情况:在我的主机(Azure-VM)上运行两个容器(一个Flask应用程序和一个运行OpenAM的Tomcat服务器)。

  • 在VM上,我可以通过打开的端口输出两个容器的内容。
  • 使用ssh端口转发,我可以与本地机器上两个容器的图形组件进行交互。
  • 两个容器都是使用相同的坞-组合创建的,并且可以通过它们的域名访问,而不需要额外的网络设置。

到目前为止,我已经使用ssh端口转发在本地计算机上配置了OpenAM。

问题:这个Flask应用程序通过其在docker中定义的域名引用OpenAM,反之亦然。我把容器的港口转到本地的机器上。Flask应用程序正在运行,我可以在浏览器中与它交互。当我在本地机器上被重定向到OpenAM时,系统就会失败,因为对OpenAM容器的引用是特定于Docker网络的。另外,OpenAM容器的端口也是不同的。换句话说,这两个网络之间的路由是不存在的。

解决方案构想:

  • 使用命令行工具在VM上执行请求。
  • 使用带有自动执行请求的无头浏览器的容器。
  • 使用网络设置“主机”并在VM上执行无头浏览器。
  • 通过单个容器(类似于VPN)路由所有请求,并使用ssh端口转发。

简化码头-合成:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-03 11:36:35

一个更好的解决方案是干净的、简单的,并且在不同的虚拟机上运行应用程序的部分时也能完美地工作。

设置并使用SSH SOCKS隧道

对于和macOS:

  • 将您的网络设置设置为Dockerfile或docker-组合中的主机。
  • 启动SSH隧道:
代码语言:javascript
复制
$ ssh -N -D 9090 [USER]@[SERVER_IP]
  • SwitchyOmega代理插件添加到Chrome浏览器中。
  • 配置SwitchyOmega,方法是转到New Profile > Proxy Profile,单击create,输入与ssh命令和端口9090相同的服务器IP。
  • 打开一个新的终端龙头并运行:
代码语言:javascript
复制
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
    --user-data-dir="$HOME/proxy-profile" \
    --proxy-server="socks5://localhost:9090"
  • 一个新的Crome会话将打开,您可以在其中简单地浏览您的对接应用程序。

当使用Firefox运行Linux或Windows \时(不需要添加任何附件)

指南如何设置SSH短袜隧道供用户浏览解释了如何设置运行Mac、Windows或Linux并使用Google或Firefox的SOCKS隧道。我只是简单地引用了macOS和Crome的设置,以防链接失效。

票数 0
EN

Stack Overflow用户

发布于 2020-12-09 16:17:08

Route all requests through a single container --这是正确的方法。

请参阅API网关模式

票数 0
EN

Stack Overflow用户

发布于 2020-12-13 11:18:54

目前为止我能找到的最好的解决方案。它不适合生产。但是,对于原型化,或者仅仅是试图通过使用容器来模拟服务器结构,这是一个简单的设置。

的一般想法:部署运行Webbrowser的第三个VNC容器,并将第三个容器的端口转发到本地机器。由于第三个容器是码头网络的一部分,它可以自然地解析内部域名,并且本地机器上的VNC安装使您能够与GUI进行交互。

逼近

  1. 将VNC添加到对接者-原始问题的组合中。
  2. 启用服务器和客户端的X11转发.
  3. 使用ssh转发VNC容器的端口。
  4. 在客户端上安装VNC,启动一个新会话,并输入预定义的密码。
  5. 试一试。

一步

  1. 从最初的问题中将VNC容器 (受堆栈溢出上的克里克氏帖子启发)添加到坞-撰写文件中:
代码语言:javascript
复制
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-compose up
  1. 启用服务器和客户端的X11转发.
  • 在客户端$ vim ~/.ssh/config上添加以下行:
代码语言:javascript
复制
Host * 
ForwardAgent yes 
ForwardX11 yes
  • 在服务器端运行$ vim /etc/ssh/sshd_config并编辑以下行:
代码语言:javascript
复制
X11Forwarding yes 
X11DisplayOffset 10
  1. 使用ssh转发VNC容器的端口
代码语言:javascript
复制
ssh -v -X -L 5900:localhost:5900 gw.example.com
  • 确保包含用于-X的X11标志。-v标志仅用于调试。
  1. 在客户端上安装VNC,启动一个新会话并输入预定义的密码。
  • 在本地机器上安装VNC查看器。
  • 打开已安装的查看器并使用转发地址localhost:59000启动一个新会话。
  • 当出现提示时,输入密码1234,这是在VNC映像的原始Dockerfile中设置的(参见上面链接的creack的post )。
  1. 现在,您可以在VNC openam:8080/openam/会话的浏览器中转到apache:80localhost:5900
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65220126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档