【问题标题】: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2014-05-22
    • 2017-09-19
    相关资源
    最近更新 更多