我正在寻找一种方法连接到Docker容器中的主机(在我的例子中,访问特定端口以在应用程序容器中使用代理) .
我尝试了 network_mode: "host"
(或 docker run --network="host"
),它在访问本地计算机的情况下工作但导致了一些与将网络驱动程序更改为 host
相关的其他问题:
SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo failed:名称或服务未知 .
我也不能使用 ifconfig
来定义网络别名,因为我使用的是Ubuntu 18.04 .
我该怎么办?
2 回答
经过一天的挣扎,终于找到了解决方案 . 它可以通过
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
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 -d
或docker-compose restart
重新启动容器现在您可以登录到您的容器(
docker-compose exec container-name bash
)并进行测试 .NOTE :确保使用
telnet [interface-ip] [port]
命令打开工作端口 .您可以在docker-compose中使用
extra_hosts
,这是您自己发现的 . 我只想在您处理本地环境时添加另一种方法 .在 docker-for-mac 和 docker-for-windows 中,在容器内,DNS名称
host.docker.internal
解析为允许网络访问主机的IP地址 .这是从the documentation中提取的相关描述:
关于 docker-for-linux 的此功能的实现有一个open issue on github .