无法从Docker容器访问本地运行的Azure功能

时间:2019-01-29 19:59:13

标签: azure docker nginx azure-functions

http://localhost:7071提供了本地运行的Azure Functions应用。 服务器端渲染的React应用在http://localhost:7070公开。 功能应用程序和react应用程序都从本地托管的简单nginx容器(http://localhost:7072)反向代理。为了完整起见,这里是nginx conf:

http {
    server {    
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name  mywebapp-localdev;

        location /api {  
            proxy_pass http://10.0.75.1:7071;  
        }
        location / {  
            proxy_pass http://10.0.75.1:7070;  
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

这是问题所在:如果直接从浏览器中命中了地址http://10.0.75.1:7071/api/hello-world,该函数的行为将与预期的一样。但是,如果通过反向代理(http://localhost:7072/api/hello-world)调用该函数,则会超时。在Nginx容器内进行的几次测试还表明,10.0.75.1上的端口7071无法访问。

问题是:如何从也在本地运行的Docker容器访问本地运行的Azure函数(使用func host start)?

1 个答案:

答案 0 :(得分:1)

知道了

除了使用上面提到的IP地址,还需要使用内部主机解析地址( host.docker.internal ):

{
    location / {  
        proxy_pass http://host.docker.internal:7070;  
    }
}

我偶然发现了许多不同的答案,具体取决于Docker的版本。这样就解决了。