[英]Mysql connect host change every time in the docker container,why?
在docker容器中。我嘗試登錄主機mysql服務器。 首先,主機IP更改了,所以讓我感到困惑。但是第二次登錄成功。 任何人都可以解釋這種奇怪的情況嗎?
我登錄的IP是192.168.100.164,但錯誤信息顯示IP 172.18.0.4,這是容器localhost。
更多信息:
root@b67c39311dbb:~/project# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 172.18.0.1 0.0.0.0 UG 0 0 0 eth0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
root@b67c39311dbb:~/project# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.0.4 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:ac:12:00:04 txqueuelen 0 (Ethernet)
RX packets 2099 bytes 2414555 (2.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1752 bytes 132863 (132.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 35 bytes 3216 (3.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 35 bytes 3216 (3.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
在啟動docker run
時嘗試添加--add-host="localhost:192.168.100.164"
。 但這對我來說不是一個好習慣。 您應該將mysql數據庫移至另一個容器並在它們之間創建網絡
沒錯,當我們啟動docker容器時,它會獲得自己的容器IP。 您需要使用docker容器映射主機端口。 然后,當您嘗試連接主機端口時,它將重定向到myssql docker容器。 請查看https://docs.docker.com/config/containers/container-networking/
我建議您創建一個docker bridged網絡,然后使用Alexey建議的--add-host創建容器。
在一個簡單的腳本中:
DOCKER_NET_NAME='the_docker_network_name'
DOCKER_GATEWAY='172.100.0.1'
docker network create \
--driver bridge \
--subnet=172.100.0.0/16 \
--gateway=$DOCKER_GATEWAY \
$DOCKER_NET_NAME
docker run -d \
--add-host db.onthehost:$DOCKER_GATEWAY \
--restart=always \
--network=$DOCKER_NET_NAME \
--name=magicContainerName \
yourImage:latest
編輯:創建網絡還將簡化容器之間的通信(如果您打算將來使用它),因為您將能夠使用容器名稱而不是其IP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.