繁体   English   中英

在 Ubuntu 18.04 上访问 Docker 容器中的主机

[英]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 )网络接口创建别名。

所以这里是说明:

  1. 首先,为lo接口创建一个别名。 您可能知道,在 Ubuntu 18.04 上不存在ifconfig命令,所以我们这样做:

sudo ip addr add 192.168.0.20/24 dev lo label lo:1

  1. 然后,把它放在你的 docker-compose.yml文件中:
extra_hosts:
      - "otherhost:192.168.0.20"

如果您不使用Docker Compose,您可以通过--add-host标志将主机添加到容器中。 类似于docker run container-name --add-host="otherhost:192.168.0.20"

  1. 最后,完成上述步骤后,使用docker-compose down && docker-compose up -ddocker-compose restart容器

现在您可以登录到您的容器( docker-compose exec container-name bash )并对其进行测试。

注意:使用telnet [interface-ip] [port]命令确保您的工作端口已打开。

你可以在你的extra_hosts -compose中使用extra_hosts ,这是你自己发现的。 当您在本地环境中工作时,我只是想添加另一种方式。

docker-for-macdocker-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM