鍍金池/ 問答/人工智能  Linux  數(shù)據(jù)庫  HTML/ 關(guān)于docker-compose內(nèi)連接數(shù)據(jù)庫的疑問

關(guān)于docker-compose內(nèi)連接數(shù)據(jù)庫的疑問

如圖,這是docker-compose配置文件
clipboard.png

現(xiàn)在運行

clipboard.png

后,我在docker外通過redis-climysql可以正常連接到容器內(nèi)的redis 和 mysql,如下圖

clipboard.png

clipboard.png

可是我的web服務(wù)中,如論如何都連接不到mysql,報錯如下:

clipboard.png

問了很多人,經(jīng)過指導,在web服務(wù)里的host應(yīng)該寫docker-compose配置文件中的service名,如下圖

clipboard.png

可是并沒有什么幫助,還是報上圖的錯誤,已經(jīng)糾結(jié)了一天了,求助

回答
編輯回答
毀與悔

docker-compose 添加定義下 networks :

version: '3'
services: 
  web:
    networks: # 自定義網(wǎng)絡(luò)
      - my-network
      
  mysql:
    networks: # 同一個網(wǎng)絡(luò)
      - my-network
          
networks:          
  my-network:      
2018年1月22日 14:39
編輯回答
夏夕

報錯提示“Client does not support authentication protocol"。
看你配置,應(yīng)該是你在node web內(nèi)的服務(wù)器配置有問題吧,你的mysql配置是有root用戶和密碼的,建議你把這些都寫到你的nodejs配置里。

也可以通過mysql鏈接后創(chuàng)建用戶和密碼。以下示例代碼

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
2017年6月20日 20:04
編輯回答
乖乖瀦

現(xiàn)在mysql的最新鏡像是8.0,建議使用5.7.22試試,另外compose里建議使用網(wǎng)絡(luò)別名直接別名當作連接目標的host來使用docker的網(wǎng)絡(luò)里維持的dns

你的問題排查的話去web容器里ping下mysql的服務(wù)名看能返回ip否,或者docker run -ti --rm --net:container:web的容器id zhangguanzhang/alpine sh來使用web容器同一個network namespace去排查
進去后telnet mysql 3389看看是否能通

2018年2月3日 08:22