让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>

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

相关推荐
NiKick4 分钟前
在Linux系统上使用nmcli命令配置各种网络(有线、无线、vlan、vxlan、路由、网桥等)
linux·服务器·网络
Keanu-7 分钟前
Docker---容器编排工具Docker Compose
docker·容器
lpfasd12330 分钟前
MariaDB Docker容器权限配置问题分析与解决方案
数据库·docker·mariadb
带娃的IT创业者36 分钟前
WeClaw_42_Agent工具注册全链路:从BaseTool到意图识别的标准化接入
大数据·网络·人工智能·agent·意图识别·basetool·工具注册
摇滚侠2 小时前
系统工作台待办实时提醒,取代五分钟刷新一次,判断有没有新的待办,利用 WebSocket 实现
网络·websocket·网络协议
猩猩—点灯3 小时前
部署远程利器-RustDesk
运维·服务器·网络
半壶清水3 小时前
[软考网规考点笔记]-局域网之以太网标准
网络·笔记·网络协议·考试
ringking1233 小时前
Linux 主机通过 Wi-Fi 上网,并将网络通过网口共享给交换机下游设备
linux·服务器·网络
123过去3 小时前
rcracki_mt使用教程
linux·网络·测试工具
Tattoo_Welkin4 小时前
Docker 入门
运维·docker·容器