访问docker桥上的服务

时间:2018-03-17 05:47:27

标签: docker networking dns docker-compose

我使用docker-compose构建一个由多个docker容器组成的应用程序。这些容器使用默认网桥进行通信,在该专用网络上获取一些IP地址,并在那些IP地址上发布服务。

在容器内,我只需按名称访问其他容器。

如果我想从主机访问此类服务,则可以简单地访问网桥上的内部IP地址。但是,每个服务的确切IP地址并不明显,重启后可能会发生变化。

有没有办法通过主机名称轻松访问docker服务?

(是的,在localhost上公开一个端口是一种替代方案,但是对于调试来说,直接通过网桥访问服务会更方便。)

1 个答案:

答案 0 :(得分:0)

我从未在docker文档中阅读此类功能。正如您在重新启动容器时所做的那样,其IP更改但其名称与在运行时分配的名称相同。

我写了一个简单的bash脚本,它执行你正在寻找的相同任务

  

“有没有办法通过名称轻松访问泊坞窗服务   主机?“

#!/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