【发布时间】:2021-07-28 12:18:00
【问题描述】:
我有一个管道工服务并使用dockercloud/haproxy 进行负载平衡。我使用 docker-compose 来运行我的 Docker 应用程序:
docker-compose.yml
version: '3'
services:
plumber:
image: registry.code.roche.com/tmbd/tsi-api:latest
command: /plumber.R
volumes:
- ./plumber/plumber.R:/plumber.R
restart: always
lb:
image: 'dockercloud/haproxy:latest'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
links:
- plumber
ports:
- 80:80
这个配置可以正常工作。现在我已经扩展了我的 plumber.R 脚本以与远程服务器上的 MongoDB 进行通信,我与该远程服务器建立了 SSH 隧道
autossh -M 20000 -L 9999:localhost:27017 <user>@<mongodb-server> -vN -p22
此外,我在 yml 文件的管道工服务配置中添加了 network_mode: host 以使其正常工作。
但是,根据herenetwork_mode: host不能与links混合,docker-compose给出以下错误信息:
lb_1 | [ALERT] 208/120346 (9) : parsing [/haproxy.cfg:41] : 'server tsi-api_plumber_1' : could not resolve address 'tsi-api_plumber_1'.
我尝试了不同的方法,但没有成功。有人可以帮助调整 docker-compose.yml 来告诉负载平衡要平衡哪个服务吗?
【问题讨论】:
-
links:已过时,您根本不需要它们;network_mode: host通常会禁用 Docker 网络,这意味着您将无法与其他容器通信。您是否需要将 MongoDB 添加到此容器堆栈,或者使用 From inside of a Docker container, how do I connect to the localhost of the machine? 中的一种技术连接到主机系统上的进程? -
MongoDB 正在另一台服务器上运行,我已经使用
autossh -M 20000 -L 9999:localhost:27017 <user>@<mongodb-server> -vN -p22建立了一个隧道。 IE。我想从我的管道工 Docker 容器中访问 localhost:9999。 -
本地系统、远程服务器和应用程序容器都认为他们是
localhost。由于 Docker 网络层的详细信息,您可能需要将ssh -L隧道侦听器设置为侦听物理主机的 localhost 接口以外的其他位置。 -
关于
links,到目前为止我还没有找到另一个解决方案来告诉dockercloud/haproxy要平衡哪个服务。 -
谢谢大卫。我可以通过将docker0网络接口
172.17.0.1上的docker主机IP地址添加到ssh -L 172.17.0.1:9999:localhost:27017 <user>@<mongodb-server> -vN -p22的隧道以及我的R脚本mongo(...url = "mongodb://172.17.0.1:9999 “……)。不需要network_mode: host。尽管如此,我仍然找不到与 dockercloud/haproxy 配合使用的links的任何替代方案。
标签: docker docker-compose haproxy plumber