在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
3条答案
按热度按时间nimxete21#
尝试添加
--add-host="localhost:192.168.100.164"
启动时docker run
. 但在我看来,这不是一个好的做法。您应该将mysql数据库移动到另一个容器中,并在它们之间创建一个网络rsaldnfx2#
我建议您创建一个docker桥接网络,然后按照alexey的建议使用--add host创建容器。
在一个简单的脚本中:
编辑:创建一个网络还将简化容器之间的通信(如果您计划在将来使用它),因为您可以使用容器名称而不是它们的ip。
mrwjdhj33#
这是真的,当我们启动docker容器时,它是为容器获取自己的ip。您需要用docker容器Map主机端口。然后,当您尝试连接主机端口时,它会重定向到mysql docker容器。请看https://docs.docker.com/config/containers/container-networking/