2017-06-28 25 views
0

我有兩個Docker容器。一種是基於標準的MariaDB映像。該容器被命名爲「mariadb」,其中的一個數據庫名爲「fi」。 fi db裏面有幾個表格,每個表格都有幾行數據。使用DataGrip或任何其他數據庫查看軟件,我可以成功訪問和查詢這個數據庫使用端口3306在本地主機上調用它。從另一個Docker訪問一個Docker中的MariaDB

我的第二個Docker容器運行一個Spring Boot應用程序,它需要訪問MariaDB中的數據。如果我在Docker中運行MariaDB,並在主機上運行Spring Boot應用程序,我可以使用連接字符串成功訪問docker中的MariaDB:「jdbc:mariadb:// localhost:3306 /?user = myUsername & password = MYPASSWORD」。我的問題是,當我嘗試在不同的Docker中運行它們時,Spring Boot應用程序無法訪問數據庫。我發現很多人說「連接」兩個碼頭工人,但這似乎並沒有解決問題。當我運行Spring Boot docker時,我執行命令「docker run -i -p 8080:8080 - 鏈接mariadb:db javaImage/bin/bash」。由於與此問題無關的原因,我正在發佈8080端口。從我所瞭解的情況來看,他們現在應該是我的Spring Boot docker中的一個環境變量,可以使用關鍵詞「db」訪問,它將被一個環境變量替換,該環境變量是MariaDB docker的實際IP。到目前爲止,在我的Java代碼中,使連接(或很好地嘗試)使用連接字符串「jdbc:mariadb:// db:3306/fi?user = myUsername & password = myPassword」。這將返回錯誤「無法連接:未知數據庫'fi'」,這很奇怪,因爲如果此連接真正連接到MariaDB泊塢窗,那麼將會找到fi數據庫。

任何幫助表示讚賞。 謝謝!

編輯:代碼段

 Connection connection = DriverManager.getConnection("jdbc:mariadb://mariadb:3306/fi?user=myUsername&password=myPassword"); 
     Statement stmt = connection.createStatement(); 
     ResultSet rs = stmt.executeQuery("SELECT * FROM ...;"); 

製造如下建議的改變到連接字符串,如上所示。現在使用命令「run -i -p 8080:8080 - 鏈接mariadb javaImage/bin/bash」運行容器。相同的結果是,在嘗試建立連接時出現此錯誤「無法連接:未知數據庫'fi'」。

+0

在此同時,我建議按照準則格式化您的問題,特別是引述代碼片段。 – techtabu

回答

3

如果容器被命名爲mariadb,則應該在url中使用它,而不是db。

jdbc:mariadb://mariadb:3306/fi?user=myUsername&password=myPassword 

在你的鏈接也應該使用MariaDB的,

docker run -i -p 8080:8080 --link mariadb javaImage /bin/bash 
+0

請參閱問題的編輯:和下面的組件。似乎沒有解決問題,同時對連接字符串和運行命令進行了更改。 – dFrancisco

+1

你可以發佈你的結果,當你做「碼頭ps」時你會得到什麼。另外,有沒有機會在你的計算機上運行本地mysql實例,當你使用本地主機時你可能會連接到它? – techtabu

+0

是的,我想出了問題,你是對的。在主機上有一些其他本地MySQL數據庫(我不知道),當我想我將表插入Docker MariaDB時,我將它們插入到主機數據庫中。我現在已經正確地將表插入到實際的Docker MariaDB中,並且一切正常。謝謝 – dFrancisco

相關問題