簡體   English   中英

每次在docker容器中,mysql連接主機都會更改,為什么?

[英]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.

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