Docker容器连接外部Mysql的几种方案

2023-12-07 0 810
目录
  • 前言
  • 方案一:
  • 方案二:
  • 方案三:
  • 总结

前言

在Linux Centos上面部署Docker容器,并且将原来的项目服务放到docker的某个镜像中,启动服务号发现无法连接到容器所在宿主机的mysql数据库,但是现在项目服务需要连接mysql数据库。

例如:SQLalchemy

# 初始化数据库连接: TODO 参数化
engine = create_engine(
f\’mysql+mysqlconnector://{DB_USERNAME}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}\’)
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
# 创建session对象:
session = DBSession()

但是在容器中项目localhost默认的是docker容器这个虚拟主机的ip,而我在docker该镜像容器中上面并没有安装mysql服务,

方案一:

使用宿主机的ip地址,docker有自己的ip,宿主机所在的Centos服务器也有自己的ip,如果把项目访问IP改为宿主机的ip。

输入ifconfig

Docker容器连接外部Mysql的几种方案

替换上面的项目中访问mysql的地址即localhost 替换好了之后启动容器。这是土办法,但遇到ip变动的window就不太可行。

方案二:

在docker配置文件yml中设置参数command

docker-compose.yml
version: \’3\’
services:
mysql:
restart: always
image: mysql:5.7
container_name: mysql
command: –default-authentication-plugin=mysql_native_password #解决外部无法访问
volumes:
– ./mydir:/mydir
– ./datadir:/var/lib/mysql
– ./conf/my.cnf:/etc/my.cnf
# 数据库还原目录 可将需要还原的sql文件放在这里
– /docker/mysql/source:/docker-entrypoint-initdb.d
environment:
– MYSQL_ROOT_PASSWORD=password
– TZ=Asia/Shanghai
ports:
– 3306:3306

方案三:

如果mysql是非docker容器化部署,可以进行挂载外部mysql

docker run -p 3306:3306 –name mysql \\
-v /usr/local/docker/mysql/conf:/etc/mysql \\
-v /usr/local/docker/mysql/logs:/var/log/mysql \\
-v /usr/local/docker/mysql/data:/var/lib/mysql \\
-e MYSQL_ROOT_PASSWORD=123456 \\
-d mysql:5.7

配置my.cnf信息

[mysqld]
# 服务端字符集
character-set-server=utf8
collation_server = utf8_general_ci
[client]
# 客户端字符集
default-character-set=utf8

另有网友提供

找到my.cnf配置文件注释掉 bind-address = 127.0.0.1,重启mysql

总结

到此这篇关于Docker容器连接外部Mysql的几种方案的文章就介绍到这了,更多相关Docker容器连接外部Mysql内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Linux服务器 Docker容器连接外部Mysql的几种方案 https://www.u-9.cn/server/linux/115795.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务