docker下的MySQL配置和跨容器调用

502 阅读2分钟

最近延续之前的开发流程,使用docker进行环境搭配,但发现使用docker进行数据库的连接会比较麻烦,所以写写文章记录一下下

docker拉取镜像

有桌面端的可以直接搜索直接pull

image.png 没有的话直接就docker pull就好了

docker pull mysql

接下来就是启动我们的mysql镜像了,这里就不建议用桌面端了,直接打开我们的cmd或powershell就行了

输入这个

#原 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

#修改后 docker run --name some-mysql -p 3307:3306-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

#这里的some-mysql是我设定的容器名称,MYSQL_ROOT_PASSWORD是你的密码,我设定的是my-secret-pw,
-d后面跟的是镜像mysql
 

ok,然后我们就能看见直接docker里的容器都有啥了

docker ps

image.png 接下来进入我们的容器里 image.png 使用的是

docker exec -it 容器ID /bin/bash

然后进入我们的sql

image.png 因为设置的密码是my-secret-pw
所以-p后面写他
这边启动完了,我们可以试试在navicat上连接试试 image.png 填上我们的信息,这里讲一个小点,因为docker容器跑着本机,主机地址也是直接就是localhost就行,端口刚刚启动的时候,设置的是3307. image.png 这样便连接成功了
那个localhost也可写你主机的ip地址,怎么找呢
在cmd里输入这个就好了 image.png

image.png

这里的ipv4地址就是我们的localhost了

跨容器连接

因为我另一个容器跑的是django,所以就以django作为演示了 image.png 我们可以看见如果按照桌面上的配置,它跑不通,会报错,django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '172.xxxx' ([Errno 111] Connection refused)")

那咋办呢?
我们换成localhost试试

image.png 还是报错,这个属于是容器隔离的锅,那么是不是说,只要我们是一个容器就行了,但是一个容器的话,我们得重写dockerfile很难受,而且这样服务端跟客户端不分离也难受,这样的话,理论上,只要我们是一个ip就行,那该咋做呢??

我们只需要把我们俩个容器放到一个network里就好了
打开powershell

image.png

docker network create mynetwork
docker network connect mynetwork some-mysql
docker network connect mynetwork fervent_panini

容器名记得写对,别写了我的了。

连上了之后,我们再试试

image.png 还是不行,咋办呢,只要我们把host改成容器名就好了 image.png 这样跨容器的mysql就配置好了