[英]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 Repo和Docker文檔的更多信息。
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.