[英]Access host machine in Docker Container on Ubuntu 18.04
我正在寻找一种方法来连接到 Docker 容器中的主机(在我的情况下,访问特定端口以在应用程序容器中使用代理)。
我尝试了network_mode: "host"
(或docker run --network="host"
),它在访问本地机器的情况下工作,但导致了一些其他与将网络驱动程序更改为host
相关的问题:
SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo 失败:名称或服务未知。
此外,我无法使用ifconfig
来定义网络别名,因为我使用的是 Ubuntu 18.04。
我该怎么办?
更新:由于docker-host
( https://github.com/qoomon/docker-host ) 映像是在过去几个月发布的,因此您无需任何手动配置即可使用它。 十分简单!
折腾了一天,终于找到了解决办法。 它可以通过docker docker run
命令中的--add-host标志或docker docker-compose.yml
文件中docker-compose.yml
,并为本地( lo | 127.0.0.1
)网络接口创建别名。
所以这里是说明:
lo
接口创建一个别名。 您可能知道,在 Ubuntu 18.04 上不存在ifconfig
命令,所以我们这样做: sudo ip addr add 192.168.0.20/24 dev lo label lo:1
extra_hosts:
- "otherhost:192.168.0.20"
如果您不使用Docker Compose,您可以通过--add-host
标志将主机添加到容器中。 类似于docker run container-name --add-host="otherhost:192.168.0.20"
docker-compose down && docker-compose up -d
或docker-compose restart
容器现在您可以登录到您的容器( docker-compose exec container-name bash
)并对其进行测试。
注意:使用telnet [interface-ip] [port]
命令确保您的工作端口已打开。
你可以在你的extra_hosts
-compose中使用extra_hosts
,这是你自己发现的。 当您在本地环境中工作时,我只是想添加另一种方式。
在docker-for-mac和docker-for-windows 中,在容器内,DNS 名称host.docker.internal
解析为允许网络访问主机的 IP 地址。
这是从文档中提取的相关描述:
主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。 从 18.03 开始,我们的建议是连接到特殊的 DNS 名称 host.docker.internal,它解析为主机使用的内部 IP 地址。 这是出于开发目的,不适用于 Docker for Windows 之外的生产环境。
github 上有一个关于为docker-for-linux实现此功能的未决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.