如何配置nginx docker容器来识别不同端口的localhost应用程序?

时间:2017-12-06 02:03:45

标签: node.js docker nginx nginx-location nginx-reverse-proxy

设定: 以下所有内容都在我的Mac OS上运行:

localhost:8089 a nodejs REST api runing in my local, OUTSIDE of the nginx container, stand alone!

locahost:80 nginx docker container

我能够在nginx docker容器中提供静态文件,但是当我将nginx的配置设置为:

http {
    server {
        location / {
            root /usr/share/nginx/html;
        }
        location /api/ {
            proxy_pass http://localhost:8089;
        }
    }
}

出于某种原因,任何假定指向localhost:80/api来电的http://localhost:8089;来电都会返回404未找到的网页

404 Not Found

nginx/1.13.6

我知道配置错在哪里?我觉得也许我不应该在nginx中使用localhost:8089?但那我该怎么用?

这里有一个例子 https://github.com/adamchenwei/docker-nginx-playground

1 个答案:

答案 0 :(得分:1)

容器有自己的网络命名空间/网络堆栈。所以容器内的localhost是容器本身的本地主机。

如果您运行的是Docker for Mac,则容器中有一个特殊的主机名,允许您连接到主机上运行的服务。有关更多信息,请参阅此答案; https://stackoverflow.com/a/43541732/1811501

如果你在Linux上运行Docker,这个答案(在同一个问题上)允许你找到要连接的IP地址; https://stackoverflow.com/a/31328031/1811501