docker两个容器之间连接---centos7容器+mysql容器
2018-05-04 15:05
483 查看
centos7容器:就是前面安装软件的容器,包括jdk,matlab,redis,tomcat
mysql容器:mysql5.7
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容器
其中tomcat中项目配置的mysql链接地址为:
ip为宿主机的ip地址(通过sqlyong是可以联通的)
3.进入tomcat启动项目,报错:
根据网上的解析,容器互连需要添加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端口才行。)
备注:redis和tomcat在一个容器,配置redis的ip时,可以设置为127.0.0.1(即使开启了远程访问,好像在容器中配置文件也没有生效)
4.启动toncat,发现可以链接mysql了。
备注:但是运行项目后,发现有些sql语句报错,which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by错误,
这是由于我们使用的是mysql5.7,
于是通过执行语句修改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容器:mysql5.7
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链接地址为:
ip为宿主机的ip地址(通过sqlyong是可以联通的)
3.进入tomcat启动项目,报错:
根据网上的解析,容器互连需要添加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端口才行。)
备注: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,
于是通过执行语句修改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容器
- Docker使用link建立容器之间的连接
- Docker使用Link在容器之间建立连接
- Docker使用Link在容器之间建立连接
- docker技术剖析--docker网络(二)docker宿主机之间容器互通 for centos7.2
- Docker使用Link在容器之间建立连接
- centos7下安装docker(12.3容器之间的连通性)
- docker-centos容器的远程连接
- Docker使用Link在容器之间建立连接
- 使用link在两个容器之间建立连接(mysql)
- Docker如何使用link建立容器之间的连接
- docker连接两个容器
- Docker学习笔记 - Docker容器之间的连接
- Docker使用Link在容器之间建立连接
- 宿主机与docker容器之间免密码ssh链接,容器与容器之间ssh免密码连接
- Docker使用Link在容器之间建立连接
- Docker使用Link在容器之间建立连接
- Docker使用Link在容器之间建立连接
- Docker创建Mysql容器并通过命令行连接到容器