簡體   English   中英

從Docker容器連接到遠程MySQL數據庫

[英]Connecting to a remote MySQL database from Docker container

我在AWS中有兩台服務器,兩者都在一個安全組中,該組允許安全組成員之間所有端口上的所有流量。 在一台服務器上我有一個MySQL服務器(沒有docker,讓我們稱這個服務器為“MySQL服務器”),另一台服務器上我有docker(我們稱之為“Docker服務器”)。 我想從docker服務器上的容器內訪問MySQL,而不必通過互聯網路由流量(我想使用MySQL服務器的內部IP地址)。

這可能嗎? 我有什么選擇?

到目前為止我嘗試過的

我已經將MySQL服務器配置為監聽所有接口,僅用於測試。 這允許我從Docker服務器成功連接到MySQL服務器(使用mysql客戶端連接到MySQL服務器的私有IP地址)。 但是,當我啟動容器時,會創建一個新的網絡命名空間,因此我無法再訪問MySQL服務器的私有IP地址。

我已嘗試使用此處所述的大使容器,但遇到同樣的問題,大使容器內部無法提供MySQL服務器的私有IP地址。

這是一個例子來說明問題和我正在嘗試做的事情。

從Docker服務器(尚未在任何容器中):

$ ping -c 1 10.0.0.155
PING 10.0.0.155 (10.0.0.155) 56(84) bytes of data.
64 bytes from 10.0.0.155: icmp_seq=1 ttl=64 time=0.777 ms

--- 10.0.0.155 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.777/0.777/0.777/0.000 ms

但是從容器中嘗試:

$ sudo docker run --rm -it apcera/nats-ping-client ping -c 1 10.0.0.115
PING 10.0.0.115 (10.0.0.115) 56(84) bytes of data.
From 10.0.0.200 icmp_seq=1 Destination Host Unreachable

--- 10.0.0.115 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

我希望這是因為我知道docker只為容器創建了一個新的專用網絡,但我不知道能夠解決我想要做的事情。

如何連接東西以便能夠從容器中訪問mysql服務器?

是的,這是可能的。

容器是否可以與世界對話受兩個因素的制約。 第一個因素是主機是否正在轉發其IP數據包。 第二個是主機的iptables是否允許此特定連接。

  1. 要檢查內核上的設置或手動打開它:( 務必設置為1

     $ sysctl net.ipv4.conf.all.forwarding net.ipv4.conf.all.forwarding = 0 $ sysctl net.ipv4.conf.all.forwarding=1 $ sysctl net.ipv4.conf.all.forwarding net.ipv4.conf.all.forwarding = 1 
  2. 如果在守護程序啟動時設置--iptables=false ,Docker將永遠不會更改您的系統iptables規則。 否則,Docker服務器會將轉發規則附加到DOCKER過濾器鏈。 所以, 一定不要使用--iptables=false

暫無
暫無

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

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