Docker v 18.03及以上:同样可以使用host.docker.internal。不过在Linux系统中,当时还不支持该特性。
Docker for Mac v 17.12至v 18.02:使用docker.for.mac.host.internal。
Docker for Mac v 17.06至v 17.11:使用docker.for.mac.localhost。
Docker for Mac 17.05及以下:
为网络接口附加一个IP地址别名,例如:
1
sudo ifconfig lo0 alias 123.123.123.123/24
2. 确保服务监听该IP地址或`0.0.0.0`。如果服务仅监听`localhost`(`127.0.0.1`),将无法接受连接。
3. 在容器中指向该IP地址,即可访问宿主机。可以在容器内运行`curl -X GET 123.123.123.123:3000`进行测试。
4. 该别名在每次重启后会重置,如有需要,可以创建一个启动脚本。
Docker网络模式相关方法
--network="bridge"(默认模式)
Docker默认会创建一个名为docker0的桥接网络。可以在宿主机上使用sudo ip addr show docker0查看其IP地址:
1 2 3 4 5 6 7
[vagrant@docker:~] $ sudo ip addr show docker0 4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff inet 172.17.42.1/16 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::5484:7aff:fefe:9799/64 scope link valid_lft forever preferred_lft forever
这里宿主机在`docker0`网络接口上的IP地址是`172.17.42.1`。
启动一个新容器并进入其shell:docker run --rm -it ubuntu:trusty bash,在容器内使用ip addr show eth0查看其主网络接口的配置:
1 2 3 4 5 6 7
root@e77f6a1b3740:/# ip addr show eth0 863: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 66:32:13:f0:f1:e3 brd ff:ff:ff:ff:ff:ff inet 172.17.1.192/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::6432:13ff:fef0:f1e3/64 scope link valid_lft forever preferred_lft forever
这里容器的IP地址是`172.17.1.192`。查看路由表:
1 2 3 4 5
root@e77f6a1b3740:/# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 172.17.42.1 0.0.0.0 UG 0 0 0 eth0 172.17.0.0 * 255.255.0.0 U 0 0 0 eth0
可以看到宿主机的IP地址`172.17.42.1`被设置为默认路由,并且可以从容器内访问:
1 2 3 4 5
root@e77f6a1b3740:/# ping 172.17.42.1 PING 172.17.42.1 (172.17.42.1) 56(84) bytes of data. 64 bytes from 172.17.42.1: icmp_seq=1 ttl=64 time=0.070 ms 64 bytes from 172.17.42.1: icmp_seq=2 ttl=64 time=0.201 ms 64 bytes from 172.17.42.1: icmp_seq=3 ttl=64 time=0.116 ms
[vagrant@docker:~] $ docker run --rm -it --network=host mysql mysql -h 127.0.0.1 -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 36 Server version: 5.5.41-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h'forhelp. Type '\c' to clear the current input statement.