【问题标题】:Accessing services on a docker bridge访问 docker 桥上的服务
【发布时间】:2018-03-17 05:47:27
【问题描述】:
我使用docker-compose 来构建一个由多个 docker 容器组成的应用程序。这些容器使用默认网桥进行通信,在该专用网络上获取一些 IP 地址,并在这些 IP 地址上发布服务。
在容器中,我可以通过它们的名称访问其他容器。
如果我想从主机访问这样的服务,可以简单地访问网桥上的内部 IP 地址。但是,每个服务的确切 IP 地址并不明显,重启后可能会发生变化。
有没有办法通过主机名轻松访问 docker 服务?
(是的,在 localhost 上公开一个端口是一种替代方法,但对于调试,直接通过网桥访问服务会更方便。)
【问题讨论】:
标签:
docker
networking
dns
docker-compose
【解决方案1】:
我从未在 docker 文档中阅读过此类功能。正如您在重新启动容器时所做的那样,它的 IP 会发生变化,但它们的名称与运行时分配的名称相同。
我编写了一个简单的 bash 脚本,它执行您正在寻找的相同任务
“有没有一种方法可以通过名称轻松访问 docker 服务
主持人?”
#!/bin/bash
# suppose these are your container name test , test1 etc mention all the name in this array
declare -a container_list=('test' 'test1')
for container_name in ${container_list[@]}
do
# getting container ip by container name
container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $container_name)
#UPDATE
# delete old entry
sed -i "/$container_ip $container_name/d" /etc/hosts
#adding them in hosts etc/hosts file so now test will be accesible from host with out exposing any port
sed -i "1s/^/$container_ip $container_name\n/" /etc/hosts
done