在Mac和Windows上,可以在容器内部使用host.docker.internal (Docker 18.03+)。
Linux上是否有一种不需要传递env变量或使用各种CLI命令提取它就能开箱即用的方法?
在Mac和Windows上,可以在容器内部使用host.docker.internal (Docker 18.03+)。
Linux上是否有一种不需要传递env变量或使用各种CLI命令提取它就能开箱即用的方法?
当前回答
https://github.com/docker/for-linux/issues/264
IP=$(ip -4 route list match 0/0 | awk '{print $3}')
echo "Host ip is $IP"
echo "$IP host.docker.internal" | sudo tee -a /etc/hosts
它会将host.docker.internal添加到您的主机。然后可以在xdebug配置中使用它。
下面是docker-compose.yml中env变量的例子
XDEBUG_CONFIG: remote_host=host.docker.internal remote_autostart=On remote_enable=On idekey=XDEBUG remote_log=/tmp/xdebug.log remote_port=9999
其他回答
这是我的解决方案:
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}
tldr;通过静态IP 172.17.0.1访问主机
对主机进行HTTP请求:
IP addr show | grep "\binet\b.执行以下命令获取静态IP地址。* \ bdocker0 \ b”| awk的{打印$ 2}| 1 - d ' / ' - f 添加新的IP到允许的主机 使用刚刚在请求中找到的IP地址:req = requests.get('http://172.17.0.1:8000/api/YOUR_ENDPOINT')
对于linux,我可以使用我试图连接到的服务名,例如,我的一个容器(php-fpm)试图连接到mysql,所以我使用mysql作为主机名,因为这是我的docker-compose中的服务名
https://github.com/docker/for-linux/issues/264
IP=$(ip -4 route list match 0/0 | awk '{print $3}')
echo "Host ip is $IP"
echo "$IP host.docker.internal" | sudo tee -a /etc/hosts
它会将host.docker.internal添加到您的主机。然后可以在xdebug配置中使用它。
下面是docker-compose.yml中env变量的例子
XDEBUG_CONFIG: remote_host=host.docker.internal remote_autostart=On remote_enable=On idekey=XDEBUG remote_log=/tmp/xdebug.log remote_port=9999
使用docker0接口ip(比如172.17.0.1)可能是一个很好的解决方案。
只要确保您需要访问的服务侦听外部连接即可。一个典型的例子是Mysql,默认绑定到127.0.0.1,导致无法访问,直到你允许外部连接。绑定到0.0.0.0)