我希望以 开头的所有内容/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 容器中运行其他所有内容(数据库等)。