首页 文章

在Ubuntu 18.04上访问Docker Container中的主机

提问于
浏览
1

我正在寻找一种方法连接到Docker容器中的主机(在我的例子中,访问特定端口以在应用程序容器中使用代理) .

我尝试了 network_mode: "host" (或 docker run --network="host" ),它在访问本地计算机的情况下工作但导致了一些与将网络驱动程序更改为 host 相关的其他问题:

SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo failed:名称或服务未知 .

我也不能使用 ifconfig 来定义网络别名,因为我使用的是Ubuntu 18.04 .

我该怎么办?

2 回答

  • 0

    经过一天的挣扎,终于找到了解决方案 . 它可以通过 docker run 命令中的 --add-host 标志或 docker-compose.yml 文件中的 extra_hosts 来完成,并为Local( lo | 127.0.0.1 )网络接口创建别名 .

    所以这是说明:

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

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

    • 然后,把它放在你 docker-compose.yml 文件上:

    extra_hosts: - "otherhost:192.168.0.20"

    如果 you are not 使用Docker Compose,您可以通过 --add-host flag将主机添加到容器中 . 像 docker run container-name --add-host="otherhost:192.168.0.20" 之类的东西

    • 最后,当您完成上述步骤后,使用 docker-compose down && docker-compose up -ddocker-compose restart 重新启动容器

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

    NOTE :确保使用 telnet [interface-ip] [port] 命令打开工作端口 .

  • 0

    您可以在docker-compose中使用 extra_hosts ,这是您自己发现的 . 我只想在您处理本地环境时添加另一种方法 .

    docker-for-macdocker-for-windows 中,在容器内,DNS名称 host.docker.internal 解析为允许网络访问主机的IP地址 .

    这是从the documentation中提取的相关描述:

    主机具有更改的IP地址(如果您没有网络访问权限,则为无) . 从18.03开始,我们建议连接到特殊DNS名称host.docker.internal,该名称解析为主机使用的内部IP地址 . 这是出于开发目的,不适用于Docker for Windows之外的 生产环境 环境 .

    关于 docker-for-linux 的此功能的实现有一个open issue on github .

相关问题