問題:
我的在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很好用是真的,但是坑也是有的,我弄了一個晚上才解決,可能是我太笨吧。
有問題,或者建議請留言,謝謝。