docker 容器如何通过主机上的 ssh 隧道访问 (mongo-db) 服务

How could a docker container access a (mongo-db) service via an ssh tunnel on host

我正在尝试连接到远程 mongo-db 实例,该实例对其本地网络的访问受到限制。所以,我创建了一个 ssh 隧道,它允许我连接:

ssh -L [port]:localhost:[hostport] [username]@[remote-ip]

但是,当我想从 docker 容器连接到同一个 mongo-db 服务时,连接超时。

我试过这样

ssh -L 172.17.0.1:[port]:localhost:[host-port] [username]@[remote-ip]

并从位于 172.17.0.1:[port] 的 docker 容器连接到远程 mongo-db,但没有成功。我的错误是什么?

注意: 我正在寻找适用于 Linux 和 Mac 的解决方案。

我的建议是这样的:

version: "3"

services:
  sshproxy:
    image: docker.io/alpine:latest
    restart: on-failure
    volumes:
      - ./id_rsa:/data/id_rsa
    command:
      - sh
      - -c
      - |
        apk add --update openssh
        chmod 700 /data
        exec ssh -N -o StrictHostkeyChecking=no -i /data/id_rsa -g -L 3128:localhost:3128 alice@remotehost.example.com

  client:
    image: docker.io/alpine:latest
    command:
      - sh
      - -c
      - |
        apk add --update curl
        while :; do
          curl -x http://sshproxy:3128 http://worldtimeapi.org/api/timezone/America/New_York
          sleep 5
        done

我在这里设置了一个 ssh 隧道,提供对远程服务器的访问 http 代理,然后在另一个容器中我正在访问该代理 通过 ssh 隧道。这几乎正​​是您想要用 mongodb.

做的

在真实环境中,您可能会使用 pre-built 图像,而不是像我在本例中所做的那样安装包 on-the-fly。