应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

docker 通过内部ip,内网ip,容器名,自定义网络别名,访问mysql。以及无法连接问题排查

3367人阅读 2022/9/6 11:41 总访问:5182328 评论:0 收藏:0 手机
分类: docker

docker 是可以通过内部ip,容器名,自定义网络别名,访问mysql的。一般来说只要mysql与程序在同一个网段都是可以使用内部ip与容器名或者自定义网络的别名进行连接的。如果ip会变化就建议不要写死ip,使用容器名,自定义网络别名来连接。其实一般默认docker内部启动容器网络都是默认使用的bridge网络,容器之间是可以互通的,当然也可以自己创建一个自定义网络,我们这里说一下这种情况。

首先创建一个自定义网络

  1. docker network create --driver bridge mynet

创建后可以查看到,我们刚刚创建的网络

使用自定义网络启动一个mysql容器

  1. 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容器

  1. docker run --name=wy_jbland_api --net mynet -p 8003:8003 wy_jbland_api:v1

查看网络状态与尝试容器间互通

  1. docker inspect mynet

可以看到两个容器都是在我们创建的自定义网络中

测试网络互联

进入api对应的容器

  1. docker exec -it wy_jbland_api /bin/bash

装好ping工具,测试ping容器名称,能ping通

测试ping,mysql创建容器时候的那个自定义网络的别名也能ping通

直接ping,mysql容器的内部ip肯定也是可以ping通的

既然能ping通也就是说使用上面三种的任意一种方式都可以连接到mysql(当然前提是mysql能支持远程连接)。

测试通过内部ip,容器名,自定义网络别名,访问mysql

通过上面的分析,理论上连接字符串写成,mysql网络别名连接:

  1. server=mynet-mysql;uid=root;pwd=123456;database=wyarchive;port=8200

以及容器名称连接:

  1. server=mysql-test;uid=root;pwd=123456;database=wyarchive;port=8200

或者直接使用内部ip连接:

  1. server=172.18.0.2;uid=root;pwd=123456;database=wyarchive;port=8200

理论上都是可以连接的,但是经过测试都不行,反而是使用服务器的外部ip访问得行……于是纠结了很久。


后面才发现是不是ip的问题,而是端口的问题!!!!!!,外网ip之所以能连接是因为使用的连接端口是8200,这个是创建mysql容器的时候外部映射的端口,外网ip访问肯定是使用这个端口了,但是通过容器内部的ip去访问不能使用外部宿主机这个端口啊!!!,应该使用mysql容器内部的端口3306去连接!使用内网ip或者容器名称去连接的使用端口修改成3306就可以了!


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

默认昵称

2023/2/6 9:28:12

不同宿主机器上的docker能够访问通信吗?主机之间互通,运行在各个主机上的docker访问

剑轩:@默认昵称可以哇,搭建一个docker集群就行了哇,本身就可以相互通讯的!

2023/2/6 10:08:42 回复

window7 docker启动失败 error: Failed to create the VirtualBox object。VirtualBox com对象失败

docker启动失败 报错 error: Failed to create the VirtualBox object这个错是因为:virtuelbox 无法启动,所以启动之后会...

docker启动报错 No default Boot2docker ISO found locally downloading the latest

这是因为,启动时如果检测到没有 Boot2Docker,就会去下载,这个下载过程出现网络连接上的错误了,导致启动失败。可以去下...

docker常用命令删除镜像命令进入容器、docker重启命令等

1. docker version查看 Docker 版本信息2. docker info显示 Docker 系统信息,包括镜像,容器数等3. 运行容器第一次使用:d...

docker 二次启动失败(本人这里使用的是hyper-v)

fatal: failed to start daemon: Error initializing network controller: Error creating default network: hnsCall faile...

docker中Sware集群与service

swarm 总结:1,docker中使用swarm集群可以达到多任务分配到不同的节点进行处理,如果有空闲的docker机子将会把请求的处理...

.netCore 使用分布式缓存(docker+redis)

1. 通过docker创建 Redis执行命令:dockerrun--nameasp-redis-p6379:6379-dredis查看redis状态:dockerps可以发现alreadywo...

.net Core3.0在Ubuntu 16.04上面的部署(Supervisor+nginx)(扩展docker)

前 言Linux 随着Linux越来越流行,本人一个.net程序员也多次研究linux与.net的相关产品,以及中间件的使用方式。So今天给...

docker 下载 mcr.microsoft.com/dotnet/core/sdk:3.1 老不行

请将其修改为:mcr.azk8s.cn/dotnet/core/sdk:3.1

docker常用命令

Docker简单命令整理清单[TOC] Login 获取账户信息获取账户信息 docker info | sed '/Username:/!d;s/.* //' ...

windows安装docker

win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/do...

Linux 安装Web版Vscode(docker+Local)

Linux 安装Web版Vscode(Docker+Local)[TOC] code-server 介绍 在任何地方的任何机器上运行VS代码,并在浏览器中访问它...

docker运行 Elasticsearch Kibana和Cerebro

Docker运行 Elasticsearch Kibana和Cerebro[TOC] Demo 运行 Docker-compose,本地构建更高效的开发环境,更直观地了解 El...

docker部署简单的mysql

Docker部署简单的mysql[TOC] 首先这玩意我是真不想写,网上写的太多了,但是又没有找到快速的创建方式。so…有疑问都可...

Unable to get the local Boot2docker ISO version: Did not find prefix "-v" in version string

我已经从 github 上下载 v19.03.12 的镜像到 vps 然后拖回本地放在 C:\Users\Administrator.docker\machine\cache 下了。依...

docker容器和镜像的区别

下面这两个比喻说得比较好 镜像就类似操作系统光盘介质,容器相当于通过光盘安装后的系统。通过光盘(镜像),我们能在不同...