Docker容器网络互通

我们在部署 Java 项目的时候,往往会需要访问很多其他的中间件,比如 MySQL、Redis、RabbitMQ等。

但是,容器的 IP 是虚拟 IP,这个虚拟 IP 是不固定的,如果在程序中写死,一旦 IP 发生改变,程序必然无法连接报错。

那么如何解决这种问题呢?

我们必须借助于docker的网络功能来解决这个问题,

官方文档:

1、docker network 常用指令介绍

命令说明文档地址
docker network create创建一个网络docker network create
docker network ls查看所有网络docs.docker.com
docker network rm删除指定网络docs.docker.com
docker network prune清除未使用的网络docs.docker.com
docker network connect使指定容器连接加入某网络docs.docker.com
docker network disconnect使指定容器连接离开某网络docker network disconnect
docker network inspect查看网络详细信息docker network inspect

2、自定义网络(演示实战)

# 1.首先通过命令创建一个网络
docker network create selfnetwork   

# 2.然后查看网络
docker network ls
// 下面 selfnetwork 是自定义的网络,而其他的都是默认的网络
// NETWORK ID     NAME          DRIVER    SCOPE
// 9baf95cfc4c8   bridge        bridge    local
// aeeaeffc993c   host          host      local
// e0215f902f7e   none          null      local
// 2678fec35df6   selfnetwork   bridge    local

# 3.让 java 应用和 mysql 都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect selfnetworkmysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect selfnetwork  docker-demo


# 4.进入dd容器,尝试利用别名访问db
# 4.1.进入容器
docker exec -it docker-demo bash
# 4.2.用db别名访问
ping db
// 结果
// PING db (172.18.0.2) 56(84) bytes of data.
// 64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.070 ms
// 64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.056 ms
# 4.3.用容器名访问
ping mysql
// 结果:
// PING mysql (172.18.0.2) 56(84) bytes of data.
// 64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.044 ms
// 64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.054 ms

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值