Redirect docker容器之间重定向的最佳实践

Redirect docker容器之间重定向的最佳实践,redirect,docker,reverse-proxy,boot2docker,microservices,Redirect,Docker,Reverse Proxy,Boot2docker,Microservices,鉴于我有多个web应用程序在docker容器中运行,我希望能够让用户从on服务重定向到其浏览器中的另一个服务。我想知道如何实现这一点——特别是如果我希望我的应用程序能够从一个docker主机移植到另一个主机 假设我们有一个ServiceA,它将用户重定向到ServiceB。所以我们有关系 ServiceA-->ServiceB 一种方法是静态分配端口和主机名,并将它们设置为web服务的环境变量——我不喜欢这样,因为我不想关心哪个服务在哪个端口上运行 第二种方法是使用类似nginx的代理,链接服务

鉴于我有多个web应用程序在docker容器中运行,我希望能够让用户从on服务重定向到其浏览器中的另一个服务。我想知道如何实现这一点——特别是如果我希望我的应用程序能够从一个docker主机移植到另一个主机

假设我们有一个ServiceA,它将用户重定向到ServiceB。所以我们有关系

ServiceA-->ServiceB

一种方法是静态分配端口和主机名,并将它们设置为web服务的环境变量——我不喜欢这样,因为我不想关心哪个服务在哪个端口上运行

第二种方法是使用类似nginx的代理,链接服务并使用代理主机和端口。但这需要在将服务移动到其他主机时更改代理配置

我想到的第三种方法是使用etcd和大使注册和解决服务。所以ServiceA将使用ServiceB大使在etcd中查找ServiceB。这导致许多docker容器只用于连接服务

你喜欢哪种方式?还是有不同的方法

编辑


真正的问题是将ServiceB的uri注入ServiceA,这样我就可以使用类似于
-DserviceB.uri=
的参数启动我的ServiceA,这样ServiceA就可以构建正确的重定向头。

我使用带有concur的设置将tomcat容器连接到apache http服务器(使用mod_jk)。Concur与etcd类似,即它允许注册和发现服务。这可能适用于您的问题,但您不限于领事

每次启动一个新的tomcat容器时,我都会为该容器分配一个不同的公共端口,在concur中注册tomcat容器,并提供有关其IP和端口的信息,然后触发一个事件(该脚本在docker主机上运行,并且为了可读性而减少)

在concur(在docker主机上)中,我在文件/etc/concur.d/bootstrap/watchTomcatServiceUp.json中定义了一个事件“TomcatServiceUp”的监视,该事件执行脚本

{
"watches":[    {
"type":"event",
"name":"TomcatServiceUp",
"handler": "/home/dude/docker/docker-http-withmodjk/callbackTomcatServiceUpEvent.sh"
   }  ]
}
脚本callbackTomcatServiceUpEvent.sh查询服务(主要是IPAddress和Port),创建一个新的workers.properties文件,将该文件复制到http docker实例(其卷),并正常地重新启动http服务器(在docker容器中)


您是否可以使用一种方法,让您的服务在Consor(或etcd)中注册,并通过事件和服务查找相互发现。或者使用nginx处理事件并进行服务查找?

Christian,当你说“在他的浏览器中从一个服务重定向到另一个服务”时,这是否意味着第二个服务必须以某种方式公开?通常docker容器(服务)不是公共的,因为它位于专用网络上。当然,它们都可以通过端口映射从外部访问。例如docker run-p 8080 images/serviceA可能与Well重复这不仅仅是关于容器链接的问题-如果我链接到我的serviceA容器中的大使并使用生成的环境变量,我就不能将它们用于重定向,因为这些主机和端口指的是专用docker网络。
{
"watches":[    {
"type":"event",
"name":"TomcatServiceUp",
"handler": "/home/dude/docker/docker-http-withmodjk/callbackTomcatServiceUpEvent.sh"
   }  ]
}
#!/bin/bash
SERVICE=$(curl localhost:8500/v1/agent/services)
java -jar /home/dude/docker/JSonParser.jar "$SERVICE" >> /tmp/workers.properties
cp workers.properties /home/dude/docker/docker-http-withmodjk/mod_jk_conf
# http graceful restart