我们如何设置docker-compose环境,以便我们可以在多个自定义定义的别名下访问容器? (或者以其他方式解决我们问题的任何替代方案。)
我们有两个应用程序†(nodejs服务器),每个应用程序都在HTTP反向代理(Nginx)之后,需要相互通信。在localhost上,配置这很容易:
配置两个虚拟主机,反向代理ServerA和ServerB:
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,后者将其反向代理到ServerB。不幸的是,链接无法实现循环依赖。这个问题有三种典型的解决方案:
--x-networking
)。 这些都不适用于我们,因为要使虚拟主机工作,我们需要能够以名称server-a.testing
和server-b.testing
来寻址Nginx容器。我们能做什么?
(†)实际上它有点复杂 - 有四个组件和链接 - 但这对解决方案没有任何影响:
答案 0 :(得分:0)
试试这个:
使用
更新nginx配置文件 location / sa
proxy_pass http://server-a:2001
location / sb
proxy_pass http://server-a:2001
当您链接两个容器时,docker会添加" conatiner_name container_ip"到链接容器的/ etc / hosts文件。因此,在这种情况下, server-a 和 server-b 将通过/ etc / hosts文件解析为各自的容器IP。
访问它们