簡體   English   中英

Dockerized Web應用程序連接到主機上的MySQL DB

[英]Dockerized web app connecting to MySQL DB on host

我想遷移我的應用程序部署以使用docker / docker hub。 當前的生產設置是在兩台Linux服務器之間平衡流量,運行Apache,Tomcat和MySQL。 Java Web應用程序通過JDBC連接到主+從MySQL數據庫。

為了最大限度地減少這種變化的影響,作為第一步,我正在考慮將tomcat和Web應用程序容納在容器中。 讓Apache和MySQL像現在一樣在主機上運行。

我遇到的問題是將在docker容器中運行的應用程序與在主機上運行的MySQL DB連接起來。

我現在能做的最好的事情是連接到docker容器,獲取它的IP地址,然后使用SQL GRANT來允許該IP地址訪問數據庫。 這樣做的問題在於,每次運行容器時,您都可能獲得新的IP地址,因此每次都必須運行一個授權。

我一直在玩這個東西一段時間,我不敢相信沒有比我上面提出的更好的解決方案。

有人做過這樣的事嗎? 任何人都有任何關於如何最好地解決這個問題的建議。

編輯有人建議“ 從Docker容器內部,我如何連接到機器的本地主機? ”是一個副本 - 但潛在的問題仍然存在。 每次我從圖像創建Docker容器時,我都可能獲得需要被授予訪問DB的容器的新IP地址。 我想盡量避免這樣做。

非常感謝

你應該使用dockerized MySQL服務器和連接兩個容器的Docker link命令。

首先運行你的MySQL:

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

然后使用link運行您的應用:

docker run --name some-app --link some-mysql:mysql -d app-that-uses-mysql

現在您可以從環境變量中獲取數據庫的地址和端口:

docker exec -it some-app printenv

尋找類似的東西: MYSQL_PORT_3306_TCP_PORT 現在,您只需在應用中使用這些變量即可。

有關Docker MySQL RepoDocker文檔的更多信息。

SQL GRANT應該使用docker0接口的IP而不是容器中的特定IP。

要找到它使用:

ifconfig | grep -A 1 docker0

inet addr:后的IP inet addr:最有可能是172.17.42.1

這將允許所有容器來自docker接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM