我有一個Spring引導應用程序,使jdbc連接到不同VPC中的數據庫。從我的本地我沒有訪問這個數據庫,所以當我在本地部署我的應用程序時,我必須打開一個ssh隧道才能連接到數據庫。這是怎樣的隧道被設置:連接到一個端口從碼頭集裝箱到主機打開的端口
ssh -L 61616:data_base_host:data_base_port [email protected]_server
然後我的應用程序連接使用:
jdbc:sqlserver://localhost:61616....
現在我需要把我的應用程序碼頭工人,容器內。這是我如何運行我的泊塢窗圖像:
docker run -p 9018:9018 myapp
9018是http端口。當Spring Boot應用程序在Docker內部啓動時,它無法連接到數據庫。錯誤是:
Failed to initialize pool: The TCP/IP connection to the host localhost, port 61616 has failed.
所以我需要將容器內的端口61616綁定到主機中的端口61616。我能夠修復使用此JDBC URL我的問題:
jdbc:sqlserver://docker.for.mac.localhost:61616
使用別名docker.for.mac.localhost使的伎倆,但它是面向Mac平臺的解決方案。我也試過:
docker run -p 9018:9018 -p 61616:61616 myapp
並沒有工作。
任何想法?
碼頭工人並沒有提供一種簡單的方式來獲得主機的IP。根據docker方法,如果你在應用程序中運行容器,則不需要在主機上運行db,你還應該容納它。如果數據庫位於容器內部,則很容易連接到數據庫。不過,你可以嘗試一些解決方法,看看這個答案的第二部分https://stackoverflow.com/a/24326540/2065796 你也可以考慮一個選項,從docker容器內部建立ssh隧道。 –