navicat访问基于docker搭建的禅道的数据库,报错”2003 can't connect to MySQL server on '' (10061 'unknown error')“
一.开启3306端口映射
为了能够远程访问数据库,在运行镜像的时候需要把容器的3306端口映射到宿主机的3306端口
docker run --name zentao -p 80:80 -p 3306:3306 -v /data/www:/app/zentaopms -v /data/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jc5201314.# -d zentao:latest
查看端口是否映射,执行命令:
docker ps
可以看到容器的3306端口映射到宿主机上:
也可以使用lsof命令查看端口状态:
lsof -i:3306
二.开启mysql远程访问
进入docker容器
docker exec -it zentao /bin/bash
找到MariaDB的配置文件"/etc/mysql/mariadb.conf.d/50-server.cnf",把"bind-address...."一行注释掉
接下来还要给账户分配权限,进入mysql命令行界面,输入:
select User, host from mysql.user;
host项的localhost表示该账户只能本地登录:
输入命令修改host(password字段为数据库密码):
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
保存更改:
FLUSH PRIVILEGES;
执行完之后再次查看host项:
因为docker每次重启都会用image镜像重新创建容器,所以不能直接重启docker,直接重启会导致设置失效。
利用commit命令将容器生成一个新的镜像(container修改为自己的容器id)
docker commit 'containerid' zentao2
关闭旧的容器:
docker kill zentao
删除旧的容器:
docker rm zentao
用新镜像生成新的容器:
docker run --name zentao -p 80:80 -p 3306:3306 -v /data/www:/app/zentaopms -v /data/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jc5201314.# -d zentao2
连接成功!
评论