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 tomcat的设置内存大小配置方式

    Docker tomcat的设置内存大小配置方式

    这篇文章主要介绍了Docker tomcat的设置内存大小配置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 使用docker inspect查看容器部署位置的方法

    使用docker inspect查看容器部署位置的方法

    Docker Compose 作为 Docker 生态系统中的重要组件,极大简化了多容器应用的管理工作,在实际运维过程中,我们经常需要了解这些由 Compose 启动的容器的具体部署位置和详细配置信息,这正是docker inspect命令大显身手的地方,下面小编给大家介绍一下查看方法
    2025-05-05
  • 查看Docker容器的信息的方法实现

    查看Docker容器的信息的方法实现

    对于运行在Docker环境的容器,有时我们想查询它们的一些基本信息,本文主要介绍了查看Docker容器的信息的方法实现,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Docker容器安装Vim编辑器的方法

    Docker容器安装Vim编辑器的方法

    Docker容器是一种轻量级、可移植的应用程序打包解决方案,在本文中,我们将讨论如何在Docker容器中安装Vim编辑器,为容器增添一个功能强大的文本编辑器,感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • docker nginx + https 子域名配置详细教程

    docker nginx + https 子域名配置详细教程

    这篇文章主要介绍了docker nginx + https 子域名配置详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Docker+Vscode搭建(本地/远程)开发环境

    Docker+Vscode搭建(本地/远程)开发环境

    本文介绍了使用Docker+VSCode搭建统一开发环境的完整方案,文中通过图文示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12
  • Docker匿名挂载和具名挂载的具体使用

    Docker匿名挂载和具名挂载的具体使用

    Docker的挂载是将容器内的目录和宿主机的目录进行绑定,本文主要介绍了Docker匿名挂载和具名挂载的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Docker SSH连接docker容器的示例代码

    Docker SSH连接docker容器的示例代码

    这篇文章主要介绍了Docker SSH连接docker容器的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Docker快速部署主流脚本语言JavaScript的全过程

    Docker快速部署主流脚本语言JavaScript的全过程

    JavaScript是目前所有主流浏览器上唯一支持的脚本语言,这也是早期JavaScript的唯一用途,下面这篇文章主要给大家介绍了关于Docker快速部署主流脚本语言JavaScript的相关资料,需要的朋友可以参考下
    2023-02-02
  • docker-compose基于MySQL8部署项目的实现

    docker-compose基于MySQL8部署项目的实现

    这篇文章主要介绍了docker-compose基于MySQL8部署项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论