簡體   English   中英

如何將 docker 容器與主機的本地主機 mysql 數據庫連接?

[英]How to connect docker container with host machine's localhost mysql database?

我有一個在后端使用 MySQL 數據庫的戰爭文件。 我已經在 docker 容器中部署了我的 war 文件,我可以從我的瀏覽器中 ping 這個。 我想將我的應用程序與 MySQL 數據庫連接起來。 該數據庫存在於我的主機的localhost:3306

由於我無法從容器的本地主機內部連接它,我嘗試的是,我運行命令docker inspect --format '{{.NetworkSettings.IPAddress }}' 213be777a837這個命令給了我一個IP1地址 172。 我去了 MySQL 服務器選項並將這個 IP 地址放在綁定字段中並重新啟動服務器。 之后,我用172.17.0.2:3306更新了我的項目數據庫連接字符串

但它不起作用。 誰能告訴我我錯過了什么? 我還嘗試使用 root@% 添加一個新的數據庫用戶,然后運行命令允許對 'root@%' 的所有權限,但沒有任何效果。

按照步驟:-

docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 dockernet
docker run -p 8082:8080 --network dockernet -d 6ab907c973d2
in your project set connection string : jdbc:mysql://host.docker.internal:3306/....

然后部署。

根據您的問題,我假設您的war fileMySQL都部署在本地,並且您想要連接它們。 允許本地部署的兩個容器相互通信的一種方法是:

  1. 創建自己的網絡docker network create <network-name>

  2. 然后,當您運行您的war fileMySQL時,使用 --network 部署它們。 例如

    • 戰爭文件: docker run --name war-file --network <network-name> <war file image>
    • MySQL: docker run --name mysql --network <network-name> <MySQL image>
  3. 之后,如果您應該能夠使用mysql:3306從您的戰爭文件 docker 容器中連接到您的 MySQL,因為它們都在同一個自定義網絡上。

如果您想了解更多相關信息,可以查看網絡上的 docker 文檔。 https://docs.docker.com/network/bridge/ )。

tl;博士:如果您使用的是 Linux,請使用172.17.0.1:3306

更長的描述:

據我了解,您需要做的是從您的 Docker 容器連接到主機端口。 但是您所做的是嘗試將主機進程(MySQL)綁定到容器網絡接口。 不確定主機進程嘗試綁定到另一個主機進程網絡名稱空間的含義,但是 IIUC 您的 MySQL 進程應該無法綁定到該地址。

當您使用將其綁定到0.0.0.0的默認設置啟動 MySQL 時,它可通過 Docker 虛擬橋用於 Docker 容器。 因此,您應該做的是通過該虛擬橋將您的請求從 WAR 進程路由到主機進程(如果這是您正在使用的網絡模式。如果您沒有更改任何 Docker 網絡設置,它應該是)。 這是通過將網橋網關地址指定為 MySQL 地址和它的起始端口來完成的。

您可以通過檢查您的網絡接口獲得網橋 IP 地址。 安裝 Docker 時,它默認配置虛擬網橋,如果您在 Linux 上,它應該顯示為docker0 IP 地址很可能是172.17.0.1 因此,從容器的角度來看,您的 MySQL 地址是jdbc:mysql://172.17.0.1:3306/...

在此處輸入圖像描述

1 - https://docs.docker.com/network/

2 - https://docs.docker.com/network/bridge/

你的設置很好。 您只需要進行這一更改。

在運行應用程序容器(部署war文件的容器)時,您需要在其docker run命令中添加以下參數。

--net=host

例子:

docker run -itd -p 8082:8080 --net=host --name myapp myimage

通過此更改,您也無需更改連接字符串。 localhost:3306可以正常工作。 您將能夠與 MySQL 建立連接。

暫無
暫無

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

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