docker - 当链接服务使用 network_mode=host 时如何为 docker compose 配置 dockercloud/haproxy
问题描述
我有一个管道工服务并使用dockercloud/haproxy进行负载平衡。我使用 docker-compose 来运行我的 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
此外,我network_mode: host
在 yml 文件中添加了管道工服务配置以使其工作。
但是,根据这里 network_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 来告诉负载平衡要平衡哪个服务吗?
解决方案
我基本上遵循了 David 的说明(见上面的评论)和From inside of a Docker container, how do I connect to the localhost of the machine?
docker0
使用网络接口(在本例中172.17.0.1
)获取 Docker 主机 IP 地址ip addr show docker0
- 建立SSH隧道
ssh -L 172.17.0.1:9999:localhost:27017 <user>@<mongodb-server> -vN -p22
- 在我的管道工 R 脚本中,我将 Mongo URL 更改为
mongo(...url = "mongodb://172.17.0.1:9999"...)
不需要network_mode: host
。
推荐阅读
- python - 如何在TOR中逐步构建电路
- javascript - Quasar 文件选择器更改 q-file 中所选文件名的文本颜色
- java - 使用 Spring Boot 安全 JWT 更改密码后访问被拒绝
- inno-setup - Inno Setup 使用 Pascal 脚本自定义 FinishedLabel
- javascript - ImportError:“useNavigate”未从“react-router-dom”导出
- angular - 来自 event.value 的值不正确
- angular - Angular 9 - 拦截器 - 如果 catcherror 中没有错误返回什么?
- python - 如何在超大图中创建动态子图?
- python-3.x - Python 正则表达式按人名分组句子
- r - REST API 与 R Plumber - GeoJSON 作为输入