[英]Docker: proxy_pass to another container - nginx: host not found in upstream
[英]nginx container proxy_pass to another docker container
nginx.conf:
user nginx;
worker_processes auto;
error_log /dev/null;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log off;
error_log /dev/null;
log_not_found off;
server_tokens off;
server_names_hash_bucket_size 64;
server_names_hash_max_size 2048;
server_name_in_redirect off;
client_body_timeout 300s;
client_header_timeout 300s;
keepalive_timeout 0;
send_timeout 300s;
client_body_buffer_size 64m;
client_header_buffer_size 2m;
client_max_body_size 48m;
proxy_connect_timeout 70s;
proxy_send_timeout 90s;
proxy_read_timeout 90s;
large_client_header_buffers 4 8k;
##
# Gzip Settings
##
gzip on;
gzip_http_version 1.1;
gzip_disable "msie6";
gzip_static on;
gzip_vary on; #vary header
gzip_min_length 0; # compress though it's volume
gzip_proxied any;
gzip_comp_level 3; #low performance server: 2 and good server: 6
gzip_buffers 16 8k;
gzip_types text/plain text/css text/javascript text/xml application/javascript application/json application/x-javascript application/xml application/xml+rss image/svg+xml image/svg;
limit_conn_zone $binary_remote_addr zone=ddos_conn:10m;
limit_req_zone $binary_remote_addr zone=ddos_req:10m rate=4r/s;
limit_req_status 500;
server {
listen 8010;
server_name 0.0.0.0;
client_max_body_size 48m;
client_body_timeout 5s;
client_header_timeout 5s;
location / {
proxy_pass http://0.0.0.0:8002;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
#proxy_ignore_client_abort on;
proxy_redirect off;
proxy_connect_timeout 70s;
proxy_send_timeout 90s;
proxy_read_timeout 90s;
keepalive_timeout 90;
limit_req zone=ddos_req burst=4 nodelay;
limit_conn ddos_conn 8;
}
}
server {
listen 8011;
location / {
return 200 'pong';
keepalive_timeout 90;
}
}
}
和命令:
对于 nginx 容器:
docker run --name nginx_con -d -p 0.0.0.0:8011:8011 -p 0.0.0.0:8010:8010 --restart always -v /Users/mac/docker/conf_files/nginx.conf:/etc/nginx/nginx.conf:ro -v /Users/mac/docker/conf_files/error_log:/var/log/nginx/error_log -v /Users/mac/dcoker/conf_files/access_log:/var/log/nginx/access_log nginx:1.15.8-alpine
对于 api 容器:
sudo docker run --name was_con -d -p 0.0.0.0:8002:8002 --net=host --restart always -e MODE='deploy' -v /Users/mac/docker/conf_files/uwsgi.ini:/uwsgi.ini apiaccount/apiproject:latest
当我从 go 到 url 0.0.0.0:8011 时,它可以工作。 (返回“乒乓”很好)
和我 go 到 url 0.0.0.0:8002 它运作良好
但我 go 到 url 0.0.0.0:8010 它不起作用。
返回 502 错误网关。
如何解决?
我在mac OS上运行它..
nginx 在 docker 中找不到 0.0.0.0:8002。 您必须在 Z05B6053C41A2130AFDZFC3BE1 中提供 api 容器的 ip 地址或 dns 名称所以例如proxy_pass http://was_con:8002
。 您可以使用docker inspect was_con
命令找到 IP
"Networks": {
"name": {
IPAddress": "172.18.0.9"
但是您在主机网络上运行 api,那么您需要从 docker 看到的主机 IP,默认为 172.17.0.1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.