一些主机上的调试工具,需要在参数里配置连接的主机和端口,我们都知道,容器可以把端口映身到主机,其它容器或主机就能通过主机的IP访问到相关的端口。但在封装容器时,显然把固定的IP地址封装进去是不好的,这样在其它网络环境就需要改相应的容器内的APP配置。因此比较好的方法是用域名host.docker.internal来代替主机的IP地址,在windows或mac的docker版本中默认支持该域名。我们可以在app需要访问主机端口时用它来指代。在docker中支持–add-host来添加相关的域名到容器中,这个域名最好指向docker网关,在Linux下获取主机上的docker网关IP命令为:
ip addr show docker0 | grep -Po 'inet \K[\d.]+'
在dokcer 20.04以上版本支持–add-host,添加这一行–add-host=host.docker.internal:host-gateway,这里的host-gateway用上面命令的IP代入。而在docker-compose中可以用:
extra_hosts: - "host.docker.internal:host-gateway"
比如,我们在xdbugger的配置文件中可以
[XDebug] zend_extension=xdebug.so xdebug.mode = debug xdebug.start_with_request=yes #Replace host.docker.internal to your computers IP address if linux xdebug.client_host=host.docker.internal
而在对应容器的docker-compose中指定该主机域名
extra_hosts: - "host.docker.internal:172.17.0.1"