docker兩個容器之間連線---centos7容器+mysql容器
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容器
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版