在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
答案 0 :(得分:0)
在启动--add-host="localhost:192.168.100.164"
时尝试添加docker run
。但这对我来说不是一个好习惯。您应该将mysql数据库移动到另一个容器,并在它们之间创建一个网络
答案 1 :(得分:0)
是的,当我们启动docker容器时,它获得了自己的容器IP。您需要使用docker容器映射主机端口。然后,当您尝试连接主机端口时,它将重定向到myssql docker容器。请查看https://docs.docker.com/config/containers/container-networking/
答案 2 :(得分:0)
我建议您创建一个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。