在docker容器中使用nginx和反向代理不起作用

在docker容器中使用nginx和反向代理不起作用

我希望以 开头的所有内容/api都指向http://localhost:3007

这是我的 nginx.conf

user nginx;
worker_processes  1;

daemon off;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;


    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/html;
            index  index.html index.htm;
        }

        location /api {
            proxy_pass http://localhost:3007;
            proxy_read_timeout 5m;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    include servers/*;
}

当我在 Mac 上本地运行它时,它可以正常工作。但是当我在 docker 容器中运行它时,它不起作用。

这是我的docker文件:

FROM smebberson/alpine-nginx:latest
COPY /dist /usr/html/
COPY nginx.conf /etc/nginx/nginx.conf

这是我的docker-compose:

version: "2"
services:
  web:
    build: .
    ports:
     - "80:80"

我从 nginx 收到的错误:

2017/06/28 13:06:51 [error] 200#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: localhost, request: "GET /api HTTP/1.1", upstream: "http://127.0.0.1:3007/api", host: "localhost"

答案1

最有可能的是,您不想要localhost:3007这样的东西api-upstream-server:3007- 一个运行应用服务器代码并公开端口 3007 的单独容器。

容器内部,localhost是容器本身,而不是宿主机。Docker 将容器和宿主机节点隔离开来。

但请注意,您可能还必须在 docker 容器中运行其他所有内容(数据库等)。

相关内容