![](/img/trans.png)
[英]What would prevent code running in a Docker container from connecting to a database on a separate server?
[英]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 )
$ 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
如果在守護程序啟動時設置--iptables=false
,Docker將永遠不會更改您的系統iptables
規則。 否則,Docker服務器會將轉發規則附加到DOCKER過濾器鏈。 所以, 一定不要使用--iptables=false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.