docker两个容器之间连接---centos7容器+mysql容器

时间:2024-03-16 18:25:06

centos7容器:就是前面安装软件的容器,包括jdk,matlab,redis,tomcat

mysql容器:mysql5.7

docker两个容器之间连接---centos7容器+mysql容器

1.首先创建mysql容器:

docker run --name=mysql -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d docker.io/mysql:5.7

启动mysql容器

docker exec -it mysql bash  

备注:上面的可以合成一块写

测试用外部的sqlyong连接软件可以连通mysql。

2.再启动centos7容器

docker run --privileged=true -t -i -v /opt:/opt -p 8081:8080 -p 6379:6379 02abcd2234 /bin/bash

其中tomcat中项目配置的mysql链接地址为:docker两个容器之间连接---centos7容器+mysql容器

ip为宿主机的ip地址(通过sqlyong是可以联通的)

3.进入tomcat启动项目,报错:

docker两个容器之间连接---centos7容器+mysql容器

根据网上的解析,容器互连需要添加link指令,于是关停centos7容器并删除,再次开启centos7容器

docker run --privileged=true -t -i -v /opt:/opt -p 8081:8080 -p 6379:6379 --link mysql:mysql 02abcd2234 /bin/bash

备注:--link后面跟的mysql:mysql,前面一个mysql为启动的mysql容器的名称(--name=mysql),后面的为添加的别名,用于tomcat配置链接地址。

同时进入项目修改jdbc链接地址(把ip换成link指定的mysql容器的名称,端口及时映射了外面的端口,也必须使用mysql容器的端口才可以,即若映射了33066,但也要使用3306端口才行。)

docker两个容器之间连接---centos7容器+mysql容器

备注:redis和tomcat在一个容器,配置redis的ip时,可以设置为127.0.0.1(即使开启了远程访问,好像在容器中配置文件也没有生效)

4.启动toncat,发现可以链接mysql了。

补充:发现在给其他机构部署docker容器的时候,尽管使用了上面的容器互联指令,也还是不能链接mysql容器。
于是又把tomcat中项目的jdbc链接地址改为localhost+port就又可以链接,所有遇到问题的话 两种方式都尝试下。
(直接使用该主机的ip也是链接不通的)

备注:但是运行项目后,发现有些sql语句报错,which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by错误,

这是由于我们使用的是mysql5.7,

docker两个容器之间连接---centos7容器+mysql容器

于是通过执行语句修改sql_mode即可

SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  
SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

--补充:
如果还是不能解决,建议安装mysql-5.6
--参考上篇文章:在docker镜像中安装软件windows+liux版

 

docker两个容器之间连接---centos7容器+mysql容器