Docker 如何使两个应用程序通过http服务器相互通信? TL;博士
我们如何设置docker compose环境,以便在多个自定义别名下访问容器?(或以其他方式解决我们问题的任何替代方案。) 现有设置 我们有两个应用程序†(nodejs服务器),每个应用程序都位于HTTP反向代理(Nginx)后面,需要相互通信。在localhost上,配置这一点很容易:Docker 如何使两个应用程序通过http服务器相互通信? TL;博士,docker,docker-compose,Docker,Docker Compose,我们如何设置docker compose环境,以便在多个自定义别名下访问容器?(或以其他方式解决我们问题的任何替代方案。) 现有设置 我们有两个应用程序†(nodejs服务器),每个应用程序都位于HTTP反向代理(Nginx)后面,需要相互通信。在localhost上,配置这一点很容易: 为服务器A和服务器B添加/etc/hosts条目: 127.0.0.1服务器a.测试 127.0.0.1服务器b.测试 在端口(如2001)上运行ServerA,在端口(2002)上运行ServerB 配
- 为服务器A和服务器B添加/etc/hosts条目:
- 127.0.0.1服务器a.测试
- 127.0.0.1服务器b.测试
- 在端口(如2001)上运行ServerA,在端口(2002)上运行ServerB
- 配置两个虚拟主机,反向代理服务器A和服务器B:
server { # Forward all traffic for server-a.testing to localhost:2001 listen 80; server_name server-a.testing; location / { proxy_pass http://localhost:2001; } } server { # Forward all traffic for server-b.testing to localhost:2002 listen 80; server_name server-b.testing; location / { proxy_pass http://localhost:2002; } }
request('https://server-b.testing",fn),我们可以测试HTTP服务器配置如何与我们的应用程序交互(例如TLS配置、CORS头、HTTP2代理)
把所有的事情都记录下来!
我们现在想将此设置移动到docker和docker compose。理论上可行的docker compose.yaml
是:
nginx:
build: nginx
ports:
- "80:80"
links:
- server-a
- server-b
server-a:
build: serverA
ports:
- "2001:2001"
links:
- nginx:server-b.testing
server-b:
build: serverB
ports:
- "2002:2002"
links:
- nginx:server-a.testing
所以当ServerA地址http://server-b.testing
它实际上到达了Nginx,Nginx将其反向代理到ServerB。不幸的是,链接不可能存在循环依赖关系。此问题有三种典型的解决方案:
李>
这两种方法对我们都不起作用,因为为了让虚拟主机工作,我们需要能够在名称为server-a.testing
和server-b.testing
下对Nginx容器进行寻址。我们能做什么
(†)实际上有点复杂——四个组件和链接——但这对解决方案没有任何影响:
- testClient(->Nginx)->ServerA
- testClient(->Nginx)->ServerB
- ServerA(->Nginx)->ServerB
- testClient(->Nginx)->ServerC
试试这个:
使用--Link server-a:server-a--Link server-b:server-b将您的server-a和server-b容器链接到nginx
使用更新nginx conf文件
位置/sa
代理通行证
位置/sb
代理通行证
链接两个容器时,docker会将“conatiner\u name container\u ip”添加到链接容器的/etc/hosts文件中。因此,在本例中,服务器a和服务器b通过/etc/hosts文件解析为各自的容器IP
您可以从或访问它们,请尝试以下操作:
使用--Link server-a:server-a--Link server-b:server-b将您的server-a和server-b容器链接到nginx
使用更新nginx conf文件
位置/sa
代理通行证
位置/sb
代理通行证
链接两个容器时,docker会将“conatiner\u name container\u ip”添加到链接容器的/etc/hosts文件中。因此,在本例中,服务器a和服务器b通过/etc/hosts文件解析为各自的容器IP
您可以从或访问它们,3个(--x-networking
)而不是nginx的组合如何?您可以在server-a
和server-b
中的每一个上设置VIRTUAL\u HOST
环境变量。如果您需要对nginx配置进行更精细的控制,您可以将docker gen和nginx容器分离出来。使用3(--x-networking
)和nginx的组合如何?您可以在server-a
和server-b
中的每一个上设置VIRTUAL\u HOST
环境变量。如果您需要对nginx配置进行更精细的控制,那么可以将docker gen和nginx容器分开。