如何通过Docker使用Mysql数据库
方法一:使用docker run命令
- 使用
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -e MYSQL_ROOT_HOST='%' mysql:latest
命令- 命令中必须含有
MYSQL_ROOT_PASSWORD
参数否则容器运行后会报出没有设置密码的错误 - 命令中需要含有
MYSQL_ROOT_HOST='%'
通过设置MYSQL_ROOT_HOST
环境变量来允许root
用户从任意 IP 访问,从而达到类似bind-address = 0.0.0.0
的效果。因为MySQL 默认情况下只允许本地连接,不允许外部网络访问。你可以检查 MySQL 容器的my.cnf
配置文件,确保bind-address
设置为0.0.0.0
,以允许来自外部的连接 - 或者你可以不添加
MYSQL_ROOT_HOST='%'
参数,转而在运行之后,进入容器内部my.cnf文件进行修改。 - 或者你可以在本地写一个my.cnf文件,使用
-v
参数将自定义的配置文件挂载到容器中的/etc/mysql/my.cnf
(或其他 MySQL 配置文件路径)位置:docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -v $(pwd)/my.cnf:/etc/mysql/my.cnf mysql:latest
- 命令中必须含有
方法二:使用docker-compose
- 需要在项目的根目录下创建一个docker-compose.yml文件
services: mysql: image: mysql:latest ports: - "3307:3306" environment: MYSQL_ROOT_PASSWORD: `yourpassword` MYSQL_DATABASE: `yourdatabase` volumes: - 需要挂载的sql文件:/docker-entrypoint-initdb.d/sql文件名 command: --bind-address=0.0.0.0
这样可以通过 docker compose up
命令启动
这样通过command设置bind-address=0.0.0.0,并且通过卷的挂载,将需要运行的文件挂载到容器的docker-entrypoint-initdb.d文件下,在此文件夹下的文件,容器会在启动初始化的时候运行。非常方便
评论区