在Mac和Windows上,可以在容器内部使用host.docker.internal (Docker 18.03+)。

Linux上是否有一种不需要传递env变量或使用各种CLI命令提取它就能开箱即用的方法?


当前回答

对于linux系统,从docker引擎的主版本20.04开始,您现在也可以通过host.docker.internal与主机通信。这不会自动工作,但你需要提供以下运行标志:

--add-host=host.docker.internal:host-gateway

请点击这里查看答案:https://stackoverflow.com/a/61424570/3757139

请参见下面的答案,添加到docker-compose文件- https://stackoverflow.com/a/67158212/243392

其他回答

这是我的解决方案:

IP_ADDRESS=$(ip addr show | grep "\binet\b.*\bdocker0\b" | awk '{print $2}' | cut -d '/' -f 1)

然后在docker-compose中:

extra_hosts:
  docker.host: ${IP_ADDRESS}

这取决于你想做什么。如果您使用——net=host运行,那么localhost应该可以正常工作。如果使用默认网络,请使用静态IP 172.17.0.1。我怀疑这两个领域的表现都不会与那些领域完全相同。

对于linux系统,从docker引擎的主版本20.04开始,您现在也可以通过host.docker.internal与主机通信。这不会自动工作,但你需要提供以下运行标志:

--add-host=host.docker.internal:host-gateway

请点击这里查看答案:https://stackoverflow.com/a/61424570/3757139

请参见下面的答案,添加到docker-compose文件- https://stackoverflow.com/a/67158212/243392

对于linux,我可以使用我试图连接到的服务名,例如,我的一个容器(php-fpm)试图连接到mysql,所以我使用mysql作为主机名,因为这是我的docker-compose中的服务名

对于linux,主机没有缺省的DNS名称。可以通过以下命令进行验证:

docker run -it alpine cat /etc/hosts

此功能已被请求,但尚未实现。您可以检查这个问题。如前所述,您可以使用以下命令从容器中查找主机的IP。

netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}'

或者,您也可以通过docker run——add-host dockerHost为run命令提供主机ip:<ip-address>…