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

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

相关推荐
小的~~6 分钟前
k8s使用本地docker私服启动自制的flink集群
docker·flink·kubernetes
诚诚k34 分钟前
docker存储
运维·docker·容器
sorel_ferris37 分钟前
Ubuntu-24.04中Docker-Desktop无法启动
linux·ubuntu·docker
运维Z叔1 小时前
云安全 | AWS S3存储桶安全设计缺陷分析
android·网络·网络协议·tcp/ip·安全·云计算·aws
weixin_456732591 小时前
网络-内核是如何与用户进程交互
网络·交互
多多*1 小时前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
爱吃涮毛肚的肥肥(暂时吃不了版)2 小时前
计算机网络34——Windows内存管理
网络·计算机网络·udp
NiNg_1_2342 小时前
使用Docker Compose一键部署
运维·docker·容器
萠哥啥都行2 小时前
Linux安装Docker以及Docker入门操作
运维·docker·容器
王哲晓2 小时前
Linux通过yum安装Docker
java·linux·docker