$ ip addr show docker0
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::f4d2:49ff:fedd:28a0/64 scope link
valid_lft forever preferred_lft forever
在容器内:
# ip route show
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 src 172.17.0.4
在
docker run
命令中使用--net="host"
,然后docker容器中的localhost
将指向docker主机适用于所有平台
Docker v 20.10及以上(自2020年12月14日起)
在Linux上,将
--add-host=host.docker.internal:host-gateway
添加到Docker命令以启用此功能。(有关Docker Compose配置,请参见下文。)使用内部IP地址或连接到特殊DNS名称
host.docker.internal
,该名称将解析为主机使用的内部IP地址适用于macOS和Windows
Docker v 18.03及以上(自2018年3月21日起)
使用内部IP地址或连接到特殊DNS名称
host.docker.internal
,该名称将解析为主机使用的内部IP地址Linux支持挂起https://github.com/docker/for-linux/issues/264
使用Docker早期版本的MacOS
Mac v 17.12至v 18.02的Docker
同上,但使用
docker.for.mac.host.internal
Mac v 17.06至v 17.11的Docker
与上面相同,但使用
docker.for.mac.localhost
Mac 17.05及以下版本的Docker
要从docker容器访问主机,必须将IP别名附加到网络接口。您可以绑定任何您想要的IP,只要确保您没有将其用于任何其他内容
sudo ifconfig lo0 alias 123.123.123.123/24
然后确保您的服务器正在侦听上述IP或
0.0.0.0
。如果它正在本地主机127.0.0.1
上侦听,它将不接受连接然后只需将docker容器指向该IP,就可以访问主机了
要进行测试,可以在容器内运行类似
curl -X GET 123.123.123.123:3000
的程序别名将在每次重新启动时重置,因此在必要时创建启动脚本
这里有解决方案和更多文档:https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
在Linux上本机运行Docker时,可以使用
docker0
接口的IP地址访问主机服务。从容器内部,这将是您的默认路线例如,在我的系统上:
在容器内:
使用一个简单的shell提取这个IP地址相当容易 脚本:
您可能需要修改主机上的
iptables
规则以允许 来自Docker容器的连接。像这样的东西会有用的 诀窍:这将允许从Docker访问主机上的任何端口 容器。请注意:
iptables规则是有序的,此规则可能会也可能不会起作用 正确的事情取决于之前的其他规则
您将只能访问以下主机服务:(a) 侦听
INADDR_ANY
(也称为0.0.0.0)或显式 在docker0
接口上侦听如果您在MacOS或Windows18.03+上使用Docker,则可以连接到神奇主机名
host.docker.internal
最后,在Linux下,您可以通过设置
--net=host
在主机网络名称空间中运行容器;在这种情况下,主机上的localhost
与容器中的localhost
相同,因此容器化服务的行为类似于非容器化服务,无需任何额外配置即可访问相关问题 更多 >
编程相关推荐