让ELK在同一个docker网络下通过名字直接访问

1. docker网络

参考https://blog.csdn.net/lihongbao80/article/details/108019773
https://www.freecodecamp.org/chinese/news/how-to-get-a-docker-container-ip-address-explained-with-examples/

默认网络有三种,分别是
1、bridge模式,–net=bridge(默认)
dokcer网络的默认设置,为容器创建独立的网络命名空间,容器具有独立的网卡等所有单独的网络栈,是最常用的使用方式。在docker run启动容器的时候,如果不加–net参数,就默认采用这种网络模式。安装完docker,系统会自动添加一个供docker使用的网桥docker0,我们创建一个新的容器时,容器通过DHCP获取一个与docker0同网段的IP地址,并默认连接到docker0网桥,以此实现容器与宿主机的网络互通。

2、host模式,–net=host
Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。。

3、none模式,–net=none
为容器创建独立网络命名空间,但不为它做任何网络配置,容器中只有lo,用户可以在此基础上,对容器网络做任意定制。这个模式下,dokcer不为容器进行任何网络配置。需要我们自己为容器添加网卡,配置IP。因此,若想使用pipework配置docker容器的ip地址,必须要在none模式下才可以。

docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
f65bddc829ad        bridge              bridge              local
887f3f66f5dc        host                host                local
7d7c2584672c        none                null                local

所有docker在建立的时候会被默认分到bridge网络空间,并且会被分配不同IP

我遇到的具体问题就是:在docker A中,访问dockerB的服务,curl不通。这是因为我用的默认网关"172.17.0.1", 不是每个Docker的IP。因此应该配置的时候用网关IP。

2. 构建自己的网络

以下内容来自ChatGPT

在 Docker 中,容器名称不会自动映射为 IP 地址。容器名称只是一个方便的标识符,用于在 Docker 环境中标识和访问容器。

要在一个容器中通过容器名称访问另一个容器,你需要确保这两个容器连接到同一个网络,并且使用容器名称进行通信。

以下是一些步骤来确保容器之间可以通过名称进行通信:

  1. 创建一个自定义网络(如果还没有):

    docker network create mynetwork
    
  2. 启动容器时,将它们连接到相同的网络并分配容器名称:

    docker run -d --name containerA --network mynetwork imageA
    docker run -d --name containerB --network mynetwork imageB
    

    在这个例子中,我们将容器A和容器B连接到同一个名为 mynetwork 的网络,并分别分配了容器名称 containerAcontainerB

  3. 在容器A中通过容器名称访问容器B:

    ping containerB
    

    Docker 会自动解析容器名称 containerB 并将其转换为相应的 IP 地址。

请确保容器A和容器B都在同一个网络中,并且容器名称没有冲突。如果仍然无法访问,请确认网络配置和容器名称是否正确,并确保容器正常运行。

对于已经启动的Docker放入到指定网络
是的,对于已经启动的 Docker 容器,你可以通过使用 docker network connect 命令将其连接到指定的网络。

以下是将已经启动的容器连接到特定网络的步骤:

  1. 首先,使用 docker network ls 命令查看可用的网络列表,并找到你想要连接的目标网络的名称或 ID。

  2. 然后,使用以下命令将容器连接到目标网络:

    docker network connect <network_name_or_id> <container_name_or_id>
    

    其中 <network_name_or_id> 是目标网络的名称或 ID,<container_name_or_id> 是要连接的容器的名称或 ID。

    例如,如果要将容器 mycontainer 连接到网络 mynetwork,可以运行以下命令:

    docker network connect mynetwork mycontainer
    
  3. 连接成功后,容器将能够与目标网络中的其他容器进行通信。

请注意,连接容器到新网络后,容器将具有两个或多个网络接口,分别对应于每个连接的网络。这样,容器可以在不同的网络之间进行通信。你可以使用 docker network disconnect 命令将容器从网络中断开连接。

docker network disconnect <network_name_or_id> <container_name_or_id>

希望这可以帮助到你!如有其他问题,请随时提问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值