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

从docker容器访问主机的ssh隧道

微生毅
2023-03-14

我有一个码头集装箱在运行。我需要通过主机的隧道从容器内访问远程服务。

我尝试用-L9000:host-ip:9999从容器中隧道到主机,然后通过127.0.0.1:9000从容器中访问服务失败。为了检查端口映射是否打开,我尝试nc-luv-p 9999#at主机nc-luv-p 9000#at容器

接下来,帕拉格。2但是,即使在容器上执行nc-luv host-ip-p 9000也没有感觉到通信

2-测试连接是否正常的快速方法是什么?最好是通过巴什。

谢了。

共有1个答案

乜建柏
2023-03-14

通过--net=host或在docker-compose中通过network_mode:host将主机网络用作容器的网络是一种选择,但这有一个不希望的副作用:(a)您现在公开了主机系统中的容器端口,以及(b)您无法再连接到那些没有映射到主机网络的容器。

在您的情况下,一个快速而干净的解决方案是让您的ssh隧道对您的docker容器“可用”(例如,通过将ssh绑定到Docker0桥),而不是在您的主机环境中公开您的docker容器(正如接受的答案中所建议的那样)。

设置隧道:

为此,请通过以下途径检索docker0桥接器正在使用的ip:docker0

ifconfig

您将看到如下所示:

docker0   Link encap:Ethernet  HWaddr 03:41:4a:26:b7:31  
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0

现在您需要告诉ssh绑定到这个ip,以便侦听通过以下途径指向端口9000的通信量

ssh -L 172.17.0.1:9000:host-ip:9999

例如,如果您有一个“Dot.NET Core”应用程序需要连接到位于:9000的远程db,那么您的“ConnectionString”将包含“Server=172.17.0.1900;

转发多个连接:

当处理多个传出连接时(例如,docker容器需要通过隧道连接到多个远程数据库),存在几种有效的技术,但一种简单明了的方法是创建多个隧道,监听到达不同docker0桥接端口的通信量。

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

  • 我正在尝试连接到一个远程mongo db实例,该实例限制了对其本地网络的访问。因此,我创建了一个ssh隧道,它允许我连接: 然而,当我想从docker容器连接到同一个mongo db服务时,连接超时。 我试图像这样指定一个绑定地址 ssh-L 172.17.0.1:[端口]:本地主机:[主机端口][用户名]@[remote ip] 并从docker容器172.17.0.1:[port]连接到远程m

  • 我有一个docker应用程序,我使用以下docker compose。yml运行它: 我有一个没有docker化的服务器在我的机器上运行,我可以通过访问它。我希望我的服务能够访问它。 我发现有人建议在我的服务配置中添加以下内容: 但是当我添加这个时,并尝试,我得到。当我尝试<code>curl时,也会出现同样的错误http://host.docker.internal:3000。 我拼命地尝试将端

  • 我在本地机器(Mac)上工作,其中有一个名为sqlvm的遗留虚拟机(这意味着我可以通过http://sqlvm:从本地主机访问这个虚拟机)。现在,我在应该连接到vm的同一个本地主机(我的Mac)中设置了几个docker容器(使用docker-compose)。< code>pymysql会引发一个异常: 如何将外部的“sqlvm”公开给内部 Docker 网络? 编辑:我尝试在yml文件中为相关容

  • 问题内容: 我是Docker的新手。 我运行了一个10节点的图像,并在运行的容器中克隆了一个存储库,运行了使用文件监视程序启动服务器的应用程序。我需要访问容器内的代码库,并在Windows主机上运行的IDE中打开它。如果完成了,那么我还希望当我在IDE中更改文件时,这些更改会在容器中引起文件监视程序。 任何帮助表示赞赏。谢谢, 问题答案: 您正在寻找的概念称为卷。您需要启动一个容器并在其中安装主机

  • 问题内容: 如果我在某个主机上运行mysql数据库,并且该主机也正在运行docker容器:我如何从主机上运行的docker容器中访问mysql数据库? 例如,是否有一种方法可以将主机端口发布到容器(与docker run -p的作用相反)? 问题答案: 关于如何以一致的,易于理解的和可移植的方式执行此操作的问题已有很长时间的讨论。尚无完整的解决方案,但我会将您链接到下面的讨论。 无论如何,您都想尝