【问题标题】:How to configure dockercloud/haproxy for docker compose when linked service uses network_mode=host当链接服务使用 network_mode=host 时如何为 docker compose 配置 dockercloud/haproxy
【发布时间】: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 &lt;user&gt;@&lt;mongodb-server&gt; -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 &lt;user&gt;@&lt;mongodb-server&gt; -vN -p22的隧道以及我的R脚本mongo(...url = "mongodb://172.17.0.1:9999 “……)。不需要network_mode: host。尽管如此,我仍然找不到与 dockercloud/haproxy 配合使用的 links 的任何替代方案。

标签: docker docker-compose haproxy plumber


【解决方案1】:

我基本上遵循了 David 的指示(参见上面的 cmets)和From inside of a Docker container, how do I connect to the localhost of the machine?

  1. 使用ip addr show docker0 获取docker0 网络接口(在本例中为172.17.0.1)上的Docker 主机IP 地址
  2. 用ssh -L 172.17.0.1:9999:localhost:27017 &lt;user&gt;@&lt;mongodb-server&gt; -vN -p22建立SSH隧道
  3. 在我的管道工 R 脚本中,我将 Mongo URL 更改为 mongo(...url = "mongodb://172.17.0.1:9999"...)

不需要network_mode: host。

【讨论】:

    猜你喜欢
    • 2019-10-24
    • 2017-12-09
    • 2020-12-08
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 2019-10-24
    相关资源
    最近更新 更多