[英]How to expose a Docker network to the host machine?
请考虑以下docker-compose.yml
version: '2'
services:
serv1:
build: .
ports:
- "8080:8080"
links:
- serv2
serv2:
image: redis
ports:
- "6379:6379"
我正在向主机发送端口以管理我的服务,但是服务可以使用默认的docker网络相互访问。 例如,在serv1
运行的程序可以访问redis:6379
并且一些DNS魔法将使其工作。 我想将我的主机添加到此网络,以便我可以通过其主机名:端口访问容器的端口。
您可以通过在与应用程序位于同一网络的容器中运行dns代理(如dnsmasq)来实现此目的。 然后将主机dns指向容器ip,您将能够解析主机名,就像您在网络容器中一样。
我不确定我是否理解正确。 您希望例如您的redis服务器不仅可以从同一网络中的容器访问,还可以使用主机IP地址从容器外部访问?
要实现这一点,你必须使用这里描述的expose命令https://docs.docker.com/compose/compose-file/#/expose
expose:
- "6379"
所以
ports:
- "6379:6379"
expose:
- "6379"
应该做的伎俩。
EXPOSE指令通知Docker容器在运行时侦听指定的网络端口。 EXPOSE不会使容器的端口可供主机访问。 为此,您必须使用-p标志发布一系列端口,或使用-P标志发布所有公开的端口。 您可以公开一个端口号并在另一个号码外部发布。
只需修改主机上的hosts文件即可添加容器条目。 示例: 127.0.0.1 container1 127.0.0.1 container2 127.0.0.1 container3
如果您需要快速解决方法来访问容器:
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
172.19.0.9
/etc/hosts
。 # /etc/hosts
172.19.0.9 container_name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.