TNBLOG
首页
博客
视频
资源
问答
猿趣
手机
关于
搜索
收藏
便签
笔记
消息
创作
登录
剑轩
人生没有办法假设,我们不能站在后来的角度去责备当时无望、甚至是怯懦、犹豫的自己
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
CSS
15篇
微服务
41篇
Git
14篇
.NET
102篇
移动开发
33篇
软件架构
23篇
.NET Core
118篇
.NET MVC
11篇
英语
3篇
随笔
82篇
Bootstrap
3篇
Redis
21篇
编辑器
10篇
Js相关
15篇
虚拟化
8篇
更多
Oracle
7篇
Python
14篇
数据库
26篇
EF
17篇
微信
3篇
前端
149篇
消息队列
6篇
docker
41篇
多线程
1篇
Java
4篇
软件基础
2篇
C++
2篇
WCF
7篇
Linux
7篇
nginx
5篇
K8S
9篇
ABP
2篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2023
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
docker 通过内部ip,内网ip,容器名,自定义网络别名,访问mysql。以及无法连接问题排查
441
人阅读
2022/9/6 11:41
总访问:
3514220
评论:
0
收藏:
0
手机
分类:
docker
docker 是可以通过内部ip,容器名,自定义网络别名,访问mysql的。一般来说只要mysql与程序在同一个网段都是可以使用内部ip与容器名或者自定义网络的别名进行连接的。如果ip会变化就建议不要写死ip,使用容器名,自定义网络别名来连接。其实一般默认docker内部启动容器网络都是默认使用的bridge网络,容器之间是可以互通的,当然也可以自己创建一个自定义网络,我们这里说一下这种情况。 ### 首先创建一个自定义网络 ``` docker network create --driver bridge mynet ``` 创建后可以查看到,我们刚刚创建的网络  ### 使用自定义网络启动一个mysql容器 ``` docker run -itd --name mysql-test -p 8200:3306 --net mynet --network-alias mynet-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /data/mysql/data_test:/var/lib/mysql mysql:8.0.30 --lower_case_table_names=1 ``` 这里使用了`--network-alias`命令指定了一个网络别名,后面也可以使用这个别名进行连接。 ### 使用自定义网络创建一个.net core api容器 ``` docker run --name=wy_jbland_api --net mynet -p 8003:8003 wy_jbland_api:v1 ``` ### 查看网络状态与尝试容器间互通 ``` docker inspect mynet ``` 可以看到两个容器都是在我们创建的自定义网络中  #### 测试网络互联 进入api对应的容器 ``` docker exec -it wy_jbland_api /bin/bash ``` 装好ping工具,测试ping容器名称,能ping通  测试ping,mysql创建容器时候的那个自定义网络的别名也能ping通  直接ping,mysql容器的内部ip肯定也是可以ping通的  既然能ping通也就是说使用上面三种的任意一种方式都可以连接到mysql(当然前提是mysql能支持远程连接)。 ### 测试通过内部ip,容器名,自定义网络别名,访问mysql 通过上面的分析,理论上连接字符串写成,mysql网络别名连接: ``` server=mynet-mysql;uid=root;pwd=123456;database=wyarchive;port=8200 ``` 以及容器名称连接: ``` server=mysql-test;uid=root;pwd=123456;database=wyarchive;port=8200 ``` 或者直接使用内部ip连接: ``` server=172.18.0.2;uid=root;pwd=123456;database=wyarchive;port=8200 ``` 理论上都是可以连接的,但是经过测试都不行,反而是使用服务器的外部ip访问得行......于是纠结了很久。 tn4>后面才发现是不是ip的问题,而是端口的问题!!!!!!,外网ip之所以能连接是因为使用的连接端口是8200,这个是创建mysql容器的时候外部映射的端口,外网ip访问肯定是使用这个端口了,但是通过容器内部的ip去访问不能使用外部宿主机这个端口啊!!!,应该使用mysql容器内部的端口3306去连接!使用内网ip或者容器名称去连接的使用端口修改成3306就可以了!
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}