您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery |

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

51自学网 2023-07-14 22:04:00
  网站维护

前言

在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

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

方案二:

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

docker-compose.ymlversion: '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命令中的各种参数使用(run、v、rm、-w、-u、-e)
Nginx配置https过程中出现的问题与解决
51自学网自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1