我正在本地使用docker-compose运行一个多docker容器,这些容器是React前端“客户端”,Nodejs应用程序“ api”和位于两者前面的Nginx代理。我一段时间以来一直在使用docker-compose设置
for val in range(len(values)):
if values[val]['id'] == value_new['id']:
values[val] = value_new
我的Nginx设置如下
version: '3'
services:
client:
build:
dockerfile: Dockerfile.dev
context: ./client
volumes:
- /usr/app/node_modules
- ./client:/usr/app
api:
build:
dockerfile: Dockerfile.dev
context: ./server
volumes:
- /usr/app/node_modules
- ./server:/usr/app
nginx:
restart: always
build:
dockerfile: Dockerfile.dev
context: ./nginx
ports:
- '8080:80'
最近,当我尝试启动容器时,出现以下错误:
upstream client {
server client:3000;
}
upstream api {
server api:5000;
}
server {
listen 80;
server_name _;
location / {
if ($http_x_forwarded_proto != 'https') {
return 301 https://$host$request_uri;
}
proxy_pass http://client;
}
location /api {
if ($http_x_forwarded_proto != 'https') {
return 301 https://$host$request_uri;
}
rewrite /api/(.*) /$1 break;
proxy_pass http://api;
}
}
有人知道为什么nginx无法找到上游吗?
我试图按如下方式添加到nginx设置块的链接:
nginx_1 | 2019/08/08 18:11:12 [emerg] 1#1: host not found in upstream "client:3000" in /etc/nginx/conf.d/default.conf:2
nginx_1 | nginx: [emerg] host not found in upstream "client:3000" in /etc/nginx/conf.d/default.conf:2
我也尝试了'depends_on'而不是链接。添加链接后,nginx不再抱怨并以代码0退出。但是当我访问localhost:8080时, 它提供301重定向到https://localhost。
非常感谢您的帮助或指导!
答案 0 :(得分:-1)
您应该检查服务的名称。 Docker compose将在名为[YOUR_PROJECT_NAME] _api_1的pod中启动您的服务api。仅启动api和client并检查docker ps
的输出。您应该查看豆荚名称列表。
在较新的docker_compose语法版本中,您可以使用link_external将[YOUR_PROJECT_NAME] _api_1映射到api。