一尘不染

将主机端口转发到Docker容器

linux

主机可以打开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上监听,因为它提供了更大的灵活性。


阅读 520

收藏
2020-06-02

共1个答案

一尘不染

您的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的连接。

2020-06-02