我在云服务器上部署项目时,可以通过外网访问springboot项目,也可以远程连接MySQL,但springboot项目就是无法访问mysql数据库,刚开始是没用设置 –net,以为用的都是默认的bridge,便可以进行访问,但并没有访问成功
springboot容器和MySQL容器同时加在默认的bridge上无法通信是因为,他们的bridge不是同一个bridge,可以考虑新建一个network,我新建了一个test-net
springboot容器启动命令:
docker run --name test --net test-net --link=bridge-mysql:mysql -p 9001:9001 -d springboot
MySQL容器启动命令:
docker run -it -d --name mysql --net=test-net \
-m 500m -v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/config:/etc/mysql/conf.d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai mysql:8.0.21 \
--lower_case_table_names=1
--link=mysql容器名:mysql别名(用于映射springboot项目的mysql,ip)
可以使用 –network,也可以使用 –link
使用 –link的话,配置那里写mysql就可以了,因为docker会把mysql容器的ip给你加到springboot容器的/etc/hosts,说白了- -link 就是在hosts里加一个别名,让springboot可以找到。通过在yml中配置这个别名,这样他就知道找mysql容器的ip
但使用 –network的话,配置那里不要写mysql,写mysql的容器ip,但容器的ip会经常变,所以
用域名会更好
,比如说把localhost改成test.com,它映射的还是127.0.0.1,这就是域名映射,往/etc/hosts加记录,容器的话,你可以进去容器里面改/etc/hosts
但容器的ip不是会变吗,ip变了,不是相当于test.com映射的是旧ip吗。其实不会的,变了的话,docker会自动更改,不然有何意义
部署项目时还遇到了一个问题,MySQL容器 –net 只有用host才可以远程连接,用其他的network就无法连接,这种情况需要把安全组的限制ip解开就可以了