mysql connect主机每次在docker容器中都会改变,为什么?

q5lcpyga  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(361)

在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
nimxete2

nimxete21#

尝试添加 --add-host="localhost:192.168.100.164" 启动时 docker run . 但在我看来,这不是一个好的做法。您应该将mysql数据库移动到另一个容器中,并在它们之间创建一个网络

rsaldnfx

rsaldnfx2#

我建议您创建一个docker桥接网络,然后按照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。

mrwjdhj3

mrwjdhj33#

这是真的,当我们启动docker容器时,它是为容器获取自己的ip。您需要用docker容器Map主机端口。然后,当您尝试连接主机端口时,它会重定向到mysql docker容器。请看https://docs.docker.com/config/containers/container-networking/

相关问题