1. 程式人生 > >docker兩個容器之間連線---centos7容器+mysql容器

docker兩個容器之間連線---centos7容器+mysql容器

centos7容器:就是前面安裝軟體的容器,包括jdk,matlab,redis,tomcat

mysql容器:mysql5.7

144314_fqtX_3347252.png

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連結地址為:144850_jEiZ_3347252.png

ip為宿主機的ip地址(通過sqlyong是可以聯通的)

3.進入tomcat啟動專案,報錯:

23094118_dsvu.png

根據網上的解析,容器互連需要新增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端口才行。)

145502_zWcL_3347252.png

備註: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,

150009_Ag7S_3347252.png

於是通過執行語句修改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版
223916_bL9y_2663968.jpg