最近把docker的一些基本操作都学了一下,想试着把个人博客通过docker来进行部署,部署过程中遇到了这么一个问题:
liquibase.exception.DatabaseException: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
这问题看着就像连接不上数据库,所以就报错了,只要解决Docker容器内访问宿主机的MySQL,这个问题就能得到解决。
将宿主机用到的mysql端口开放出来,默认是3306,如果是阿里云服务器,可以将连接数据库的url的ip写为内网ip,这样不用去阿里云控制台安全组上再配置端口
#开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#刷新一下
firewall-cmd --reload
博主已经通过dockerfile构建好了镜像,这里先尝试启动一下
docker run rrblog
启动日志内报错如下,端口172.17.0.3不允许连接到mysql
java.sql.SQLException: null, message from server: "Host '172.17.0.3' is not allowed to connect to this MySQL server"
其实这个端口也可以通过以下指令获取
docker exec -it 容器ID ip addr
从二可以得出,容器内是通过这个端口172.17.0.3连接宿主机mysql的,所以要给它开放一下权限
mysql -u root -p
grant all privileges on *.* to 'root'@'172.17.0.3' identified by 'pwd' with grant option;
开放权限成功是这个样子的
Query OK, 0 rows affected, 1 warning (0.01 sec)
docker run -d -p 8080:8080 --name=rrblog rrblog
docker logs --since 30m 6a3c47ac9db8
这个问题的解决步骤就大致上面这三点了:
最后贴一下我的个人博客链接,项目做得垃圾求大佬轻喷---->渣渣博客链接