Docker 容器无法解析在本地计算机中定义的子域

Docker container cannot resolve the subdomain defined in local machine

我在我的本地服务器上定义了一个子域,我想从 docker 容器请求子域,但容器无法解析子域。 本地服务器使用 nginx 而不是 docker 容器

本地 nginx 配置

server {
    listen 80;

    root /data/www/html/sites/car/public;
    index index.php index.html index.htm;

    server_name car.localhost;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

本地服务器主机 - /etc/hosts

127.0.0.1       car.localhost

docker 容器中的卷曲错误

echo shell_exec("curl http://car.localhost 2>&1");
Fatal error: Uncaught Exception: [0] cURL error 6: Could not resolve host: car.localhost

Docker 容器有自己的主机文件,不关心主机的 /etc/hosts.

中有什么

如果您希望容器有额外的主机,您可以将其作为参数传递给 docker 运行 参见此处:https://docs.docker.com/engine/reference/run/#managing-etchosts

或在 docker-compose 文件中查看此处:https://docs.docker.com/compose/compose-file/#extra_hosts

此外,取决于网络 - 容器的 127.0.0.1 可能不指向主机。如果您使用 host 网络,那么它应该可以工作。但是,如果您使用的是网桥或默认配置,那么它将有所不同。在这种情况下,您可以在 MAC/PC 上使用 docker.internal 或在 linux 上使用 host.docker.internal 和特殊的 --add-host=host.docker.internal:host-gateway