如何将Dockernetworking暴露给主机?

考虑下面docker-compose.yml

 version: '2' services: serv1: build: . ports: - "8080:8080" links: - serv2 serv2: image: redis ports: - "6379:6379" 

为了pipe理我的服务,我正在向主机发送端口,但是这些服务只需使用默认的dockernetworking即可访问对方。 例如,一个在serv1运行的程序可以访问redis:6379 ,一些DNS魔法会使这个工作成为可能。 我想添加我的主机到这个networking,以便我可以通过他们的主机名:端口访问容器的端口。

您可以通过在与应用程序位于同一networking的容器中运行dns代理(如dnsmasq)来完成此操作。 然后将你的主机DNS指向容器的IP地址,你将能够parsing主机名,就好像你在networking上的容器一样。

https://github.com/hiroshi/docker-dns-proxy就是一个例子。

我不确定我是否正确理解你。 你希望你的Redis服务器不仅可以从同一个networking中的容器访问,也可以使用你的主机IP地址从容器外访问?

为了达到这个目的,你必须使用这里描述的expose命令https://docs.docker.com/compose/compose-file/#/expose

 expose: - "6379" 

所以

 ports: - "6379:6379" expose: - "6379" 

应该做的伎俩。

EXPOSE指令通知Docker在运行时侦听指定的networking端口。 EXPOSE不会使容器的端口可以被主机访问。 要做到这一点,您必须使用-p标志来发布一系列的端口,或者使用-P标志来发布所有暴露的端口。 您可以公开一个端口号并在外部使用另一个号码进行发布。

https://docs.docker.com/engine/reference/builder/#expose