当前位置: 首页 > 面试题库 >

将主机端口转发到Docker容器

宰父俊彦
2023-03-14
问题内容

主机可以打开Docker容器访问端口吗?具体来说,我在主机上运行了MongoDB和RabbitMQ,我想在Docker容器中运行一个进程以侦听队列并(可选)写入数据库。

我知道我可以将端口从容器转发到主机(通过-
p选项),并可以从Docker容器中连接到外部环境(即Internet),但我不想公开RabbitMQ和MongoDB端口从主持人到外界

编辑:一些澄清:

Starting Nmap 5.21 ( http://nmap.org ) at 2013-07-22 22:39 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
PORT     STATE SERVICE
6311/tcp open  unknown

joelkuiper@vps20528 ~ % docker run -i -t base /bin/bash
root@f043b4b235a7:/# apt-get install nmap
root@f043b4b235a7:/# nmap 172.16.42.1 -p 6311 # IP found via docker inspect -> gateway

Starting Nmap 6.00 ( http://nmap.org ) at 2013-07-22 20:43 UTC
Nmap scan report for 172.16.42.1
Host is up (0.000060s latency).
PORT     STATE    SERVICE
6311/tcp filtered unknown
MAC Address: E2:69:9C:11:42:65 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 13.31 seconds

我必须执行此技巧才能使容器获得任何互联网连接:我的防火墙阻止了从Docker容器到外部的网络连接

编辑
:最终,我开始使用管道创建自定义网桥,并让服务在网桥IP上进行侦听。我采用这种方法,而不是让MongoDB和RabbitMQ在dockerbridge上监听,因为它提供了更大的灵活性。


问题答案:

您的Docker主机将适配器公开给所有容器。假设您使用的是最新的ubuntu,则可以运行

ip addr

这将为您提供网络适配器的列表,其中一个看起来像

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 22:23:6b:28:6b:e0 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
inet6 fe80::a402:65ff:fe86:bba6/64 scope link
   valid_lft forever preferred_lft forever

您将需要告诉Rabbit / mongo绑定到该IP(172.17.42.1)。之后,您应该能够从容器中打开到172.17.42.1的连接。



 类似资料:
  • 我在远程VPS上的docker-compose网络中运行容器。我希望能够从我的本地主机访问在这些容器中运行的数据库。 例如,如果容器和位于VPS上的容器网络中,我希望从计算机的访问。Kubernetes的CLI允许使用。 编辑:我已经接受了Ali Tou的回答,但是,如果能看到一个不需要重新启动容器来重新配置其端口以将它们暴露到主机上的解决方案,那就太好了。 编辑2:我在一篇相关的文章https:

  • 问题内容: 我在公司中提供一个私有Docker容器,并希望我的同事能够在我们的内部网络中访问,问题是我的来宾操作系统是OSX,因此我只能使用192.168.99.100:3000访问我的应用程序来自docker机器的默认IP。 如何将docker-machine 3000端口转发到主机80端口? 问题答案: 目前,Docker Machine是在您计算机中VirtualBox下运行的虚拟机,因此要

  • 我有一个swarm集群,我在其中创建了一个全局服务,在集群中的所有docker主机上运行。 目标是让此服务的每个容器实例连接到侦听docker主机上的端口。 有关详细信息,我将遵循此Docker守护进程指标指南,以在所有主机上公开新的docker指标API,然后将该主机端口代理到覆盖网络中,以便Prometheus可以从所有群主机中抓取指标。 我已经阅读了多个docker github问题#839

  • 我想从一个服务器设置服务多个站点: 到目前为止,我只发现docker在使用静态IPS时进行端口重定向。 是否可以通过主机名使用docker进行端口重定向? 我使用一个免费的亚马逊EC2 Insance。 谢谢博

  • 问题内容: 我在Mac OSX上使用Docker。 我有一个带有打开的守护程序的容器,正在侦听port 。 虚拟机设置为将所有计算机端口流量转发到此容器端口。 我想将我的本地主机设置为将所有流量转发到计算机端口。 我的机器在 我已经使用Apache虚拟主机配置和Proxy将本地端口8080上的所有HTTP通信转发到了计算机。 对ssh做相同的正确方法是什么? 我认为它涉及到此处提到的SSH隧道传输

  • 问题内容: 我设置了一个容器来运行elasticsearch。服务启动,但是我无法通过curl或浏览器连接到该服务。 连接到没有任何效果。docker ps显示端口; 我是否缺少一些配置值?谢谢! [更新]我也在运行命令中尝试了-p 问题答案: 我测试了您的Dockerfile,但是它可以正常工作。 我尝试构建此Dockerfile并运行它。 如下所示,请求返回json响应。 检查您的选项。这意味