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
。
我在我的本地服务器上定义了一个子域,我想从 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
。