当前位置: 首页 > 知识库问答 >
问题:

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

越飞语
2023-03-14

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

ssh-L[port]:本地主机:[hostport][username]@[remote-ip]

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

我试图像这样指定一个绑定地址

ssh-L 172.17.0.1:[端口]:本地主机:[主机端口][用户名]@[remote ip]

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

注意:我正在寻找一个解决方案,同时适用于Linux和Mac。

共有1个答案

索卓
2023-03-14

我建议这样做:

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做的。

在真实环境中,您可能会使用预构建的图像,而不是像我在本例中所做的那样动态安装软件包。

 类似资料:
  • 问题内容: 使用ubuntu tusty,在远程计算机上运行了一项服务,我可以通过SSH隧道通过端口转发访问该服务。 我正在运行一个Docker容器。我需要通过主机的隧道从容器内部访问该远程服务。 我尝试使用进行从容器到主机的隧道传输,然后从容器内部通过访问服务失败。为了检查端口映射是否打开,我尝试了 在此之后,parag。2,但即使 在集装箱处也没有察觉的交流 我还尝试通过映射端口,但是这报告绑

  • 我有一个码头集装箱在运行。我需要通过主机的隧道从容器内访问远程服务。 我尝试用从容器中隧道到主机,然后通过从容器中访问服务失败。为了检查端口映射是否打开,我尝试 接下来,帕拉格。2但是,即使在容器上执行也没有感觉到通信 2-测试连接是否正常的快速方法是什么?最好是通过巴什。 谢了。

  • 问题内容: 我正在boot2docker 1.3.1下运行。 我有一个Docker容器通过运行Web服务器。 如果我连接到该容器,则可以使用浏览该网站,以便知道服务器正在运行。 我用以下容器运行容器: 它具有以下详细信息: 我以为可以访问,从托管人访问该网站。 这是行不通的。我只是在Chrome中看到“正在连接…”,却一无所获。 我究竟做错了什么? 问题答案: 好吧,愚蠢的我,我在boot2doc

  • 在页面存储Python Flask微服务中,我尝试使用主机名master-db访问MySQL数据库,但该名称无法解析。

  • 我希望使用jmx或JSTATD通过ssh隧道(到EC2机器)使用visualvm应用程序。我该怎么做?下面是已经尝试(和失败)的列表:(顺便说一句:如果visual vm不合适,如何在远程计算机上查找内存泄漏?) 我在EC2机器上设置了jstatd服务器(应用程序已经在上面运行),然后在VisualVM中设置了一个将本地端口3333映射到远程端口1099的隧道,我试图在端口3333上使用jstat

  • 问题内容: 我的目的是连接到位于防火墙后面的服务器(主机)。我可以通过连接到网络中的另一台服务器(隧道)然后通过SSH到该服务器来访问此服务器。但是,我无法通过JSch实现相同的方案。 我无法为此编写以下代码。如果我在这里做任何愚蠢的事情,请告诉我。 上面的代码在行中给出了以下异常。 问题答案: jsch上的代理设置允许您连接到远程端上 正在运行的 代理服务器。一个在远程端将 不 被视为一个代理。