docker容器之间通讯-network解读

 更新时间:2023年12月15日 09:23:20   作者:古甲哈醒  
这篇文章主要介绍了docker容器之间通讯-network解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

docker为容器创建独立的网络环境,实现宿主和容器、容器之间的网络隔离,默认使用bridge模式的网络,实现容器之间、容器与宿主机之间、乃至与外界之间 的网络通信。

但是我们在实际部署应用的时候,发现并不能直接通过容器内部端口访问另外一个容器的应用(比如:mysql容器端口是3306,web应用不能直接通过3306访问mysql),而是通过端口映射到宿主机器来实现容器之间的访问。

那么有什么方式能实现直接通过容器内部端口进行数据通讯呢?那就是通过network方式。

docker network创建一个桥接网络,在docker run的时候将容器指定到新创建的桥接网络中,这样同一桥接网络中的容器就可以通过互相访问。

1、创建network

[root@iZbp13sno1lc2yxlhjc4b3Z ~]# docker network create my-network
[root@iZbp13sno1lc2yxlhjc4b3Z ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
e4de24aaf1c2        bridge              bridge              local
093caaca12b4        host                host                local
a2b05d7d591a        my-network          bridge              local
6e6497f8e311        none                null                local
[root@iZbp13sno1lc2yxlhjc4b3Z ~]# 

可以看到my-network已经创建好,另外其他3个是docker默认创建的。

2、创建容器时指定网络

在创建容器时指定使用my-network网络,并设置网络别名。

docker run -itd --name mysql --network my-network --network-alias mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7.24
  • –network 指定使用的网络
  • –network-alias 设置网络别名

如果容器已创建好但是之前没有指定自己的网络,则使用下面命令修改:

docker network connect --alias mysql my-network mysql

第一个mysql是网络别名 第二个mysql是容器名

3、通过网络别名测试访问

进入web容器,使用ping命令测试

[root@iZbp13sno1lc2yxlhjc4b3Z ~]# docker exec -it tomcat_kq bash
root@161eee53356c:/usr/local/tomcat# ping mysql
PING mysql (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.my-network (172.18.0.2): icmp_seq=1 ttl=64 time=0.049 ms

可以看到通过mysql网络别名可以直接访问。

另外通过容器id或者主机名也是可以访问的。但是你不加入这个自定义网络,则没法访问。这个在项目实际应用中非常重要,特别是通过主机名识别服务的项目,如springcoud项目

4、项目实际应用

修改web项目访问mysql的数据库地址,由ip改为网络别名,端口为容器内部端口:

jdbc:mysql://mysql:3306/kaoqin?allowMultiQueries=true

注意:mysql是前面设置的网络别名,3306是容器内部端口

这里特别提一下springcloud项目,eureka中心一般是通过主机名来中注册发现服务的,但是一放到docker容器中,springboot应用就报错,提示不能发送心跳到注册中心,就是因为容器中间的网络隔离造成的,通过把所有容器加入到自定义网络就能解决此问题。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker容器的创建、启动、和停止的方法

    Docker容器的创建、启动、和停止的方法

    这篇文章主要介绍了Docker容器的创建、启动、和停止的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • docker mysql修改root账号密码并赋予权限

    docker mysql修改root账号密码并赋予权限

    本文主要介绍了docker mysql修改root账号密码并赋予权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Docker上部署Nginx的方法步骤

    Docker上部署Nginx的方法步骤

    本文主要介绍了Docker上部署Nginx的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • docker如何进入启动容器查看内部目录结构

    docker如何进入启动容器查看内部目录结构

    这篇文章主要介绍了docker如何进入启动容器查看内部目录结构问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • .netcore 使用surging框架发布到docker

    .netcore 使用surging框架发布到docker

    这篇文章主要介绍了netcore 使用surging框架发布到docker,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Docker安装ELK并实现JSON格式日志分析的方法

    Docker安装ELK并实现JSON格式日志分析的方法

    这篇文章主要介绍了Docker安装ELK并实现JSON格式日志分析的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • docker容器启动失败如何查看日志

    docker容器启动失败如何查看日志

    这篇文章主要介绍了docker容器启动失败如何查看日志问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 详细讲解Docker-Compose部署Kafka KRaft集群环境

    详细讲解Docker-Compose部署Kafka KRaft集群环境

    这篇文章主要为大家介绍了Docker-Compose部署Kafka KRaft集群环境的全面详细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Docker部署Java项目实践详细介绍

    Docker部署Java项目实践详细介绍

    Docker是一种流行的容器化平台,用于部署和管理Java项目,这篇文章主要给大家介绍了关于Docker部署Java项目的相关资料,通过构建Docker镜像、编写Dockerfile和使用DockerCompose进行多服务部署,需要的朋友可以参考下
    2025-05-05
  • Docker安装Redis并介绍可视化客户端进行操作

    Docker安装Redis并介绍可视化客户端进行操作

    这篇文章主要介绍了Docker安装Redis并介绍可视化客户端进行操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04

最新评论