考虑以下docker-compose.yml
version: '2'
services:
serv1:
build: .
ports:
- "8080:8080"
links:
- serv2
serv2:
image: redis
ports:
- "6379:6379"
我正在向主机发送端口以管理我的服务,但服务可以使用默认的docker网络相互访问。例如,在serv1
上运行的程序可以访问redis:6379
,而某些DNS魔法可以使其正常工作。我想将我的主机添加到此网络,以便我可以通过其主机名:端口访问容器的端口。
答案 0 :(得分:5)
您可以通过在与应用程序位于同一网络的容器中运行dns代理(如dnsmasq)来实现此目的。然后将主机dns指向容器ip,您将能够解析主机名,就像您在网络容器中一样。
答案 1 :(得分:2)
我不确定我是否理解正确。你想要,例如您的redis服务器不仅可以从同一网络中的容器访问,还可以使用主机IP地址从容器外部访问?
要实现这一点,您必须使用公开命令,如此处所述https://docs.docker.com/compose/compose-file/#/expose
expose:
- "6379"
所以
ports:
- "6379:6379"
expose:
- "6379"
应该这样做。
EXPOSE指令通知Docker容器侦听 运行时指定的网络端口。 EXPOSE不会创建端口 主机可以访问的容器。要做到这一点,你必须使用 -p标志用于发布一系列端口或-P标志 发布所有暴露的端口。您可以公开一个端口号和 在另一个号码下向外发布。
答案 2 :(得分:0)
只需修改主机上的hosts文件即可添加容器条目。 示例: 127.0.0.1容器1 127.0.0.1容器2 127.0.0.1 container3
答案 3 :(得分:0)
如果您需要快速解决方法来访问容器:
$ 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