Docker容器之间通信实战,.Net Core应用连接redis、mysql

问题:

我的在docker上部署了自己开的.Net Core应用无法与容器内的redis、mysql通信,报错连接不上。

解决方案:

通过在docker中搭建Bridge network(桥接网络),容器接入Bridge network,通过Bridge network来完成通信连接。

实施:

部署docker ,容器通信原理我就不用官方理论性话语描述来,太累且说的复杂了,感兴趣的朋友网上度娘就可以。

1.分别pull mysql、redis的镜像

docker pull redis

docker pull mysql:5.7

可以先分别把这两个镜像跑起来

启动mysql容器,记住要自定义运行的镜像名,就是加 --name

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin123 mysql:5.7

/*
-d  后台运行
--name  运行的容器名,这个很重要,我们一定要写一个简单的名字,方便用
-p  端口映射
-e  配置参数,不是每个容器都需要,这是mysql指定的,初始化root账户密码

启动redis容器,都要加--name

docker run -d --name redis -p 6379:6379 redis

2.创建Bridge network

docker network create bridge-net   //bridge-net 是我自己命名的

3.修改自己程序的连接配置

大家应该看到了,这里的连接地址不是127.0.0.1之类的ip地址,而是我们mysql容器的--name ,这也是为什么我说要加--name的原因,如果不加他会随机生成,太麻烦

redis也是一样的

4.打包自己的应用镜像跑起来

docker build -t moden.api:v1 .    //后面有点(.)符号的
//
-t  镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

镜像做好之后就来启动镜像了

docker run -d --name moden.api --network bridge-net -p 80:80 moden.api:v1
//
--network 这个就是我们搭建的桥接网络名

5.最后一步,其实这一步是可以没有的我只是为了让大家明白桥接网络是这么回事,所以留了一步,算是坑吧

docker network connect bridge-net mysql

docker network connect bridge-net redis

现在就大功告成了。其实这一步也不是坑,只是告诉大家一个接入方式而已,如果你已经提前部署好了redis、mysql或者其他服务,你不需要重启容器也可以接入桥接网络

docker run -d --name mysql --network bridge-net -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin123 mysql:5.7

在启动容器是加入--network 标注跟后面接入其实是一样的。

到此结束。

其实我也是刚开始用docker,虽说docker很好用是真的,但是坑也是有的,我弄了一个晚上才解决,可能是我太笨吧。

有问题,或者建议请留言,谢谢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章