让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模式下才可以。

shell 复制代码
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>

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

相关推荐
想成为高手49919 分钟前
网络基础概念与应用:深入理解计算机网络
网络·计算机网络
x2lab35 分钟前
国产化 ARM 环境mysql-mariadb 部署
arm开发·mysql·docker·mariadb
Aiden_SHU1 小时前
Wireshark中的length栏位
服务器·网络·wireshark
叫我龙翔2 小时前
【计网】实现reactor反应堆模型 --- 多线程方案优化 ,OTOL方案
linux·运维·网络
mit6.8242 小时前
[Docker#9] 存储卷 | Volume、Bind、Tmpfs | -v/mount | MySQL 灾难恢复 | 问题
linux·运维·docker·容器·架构
qq_167401512 小时前
Docker 组添加用户,设置允许普通用户操作 docker
docker·容器
Z1eaf_complete2 小时前
Docker的基础使用
运维·docker·容器·云计算
?crying3 小时前
蓝队基础4 -- 安全运营与监控
网络·安全·web安全
茶颜悦色vv3 小时前
蓝队知识浅谈(中)
网络·web安全·网络安全
Xlbb.3 小时前
安全见闻6-9
网络·安全·web安全·网络安全