目前我有 2 个 Docker 容器:
- 应用程序(python烧瓶)
- 负载均衡器 (nginx)
我使用docker-composer up分别启动两个容器 Nginx 正在侦听端口 8080,并且应该将 HTTP 请求转发到正在侦听端口 8081 的应用程序。目前这不起作用,因为 nginx 对应用程序容器一无所知。
86615a5b0f02 parzee/loadbalancer "/usr/local/bin/start" 3 minutes ago Up 3 minutes 127.0.0.1:8080->8080/tcp loadbalancer_loadbalancer_1
9adc8a04b356 parzee/application "/usr/local/bin/start" 6 minutes ago Up 5 minutes 127.0.0.1:8081->8081/tcp application_application_1
这是我的默认配置
upstream application {
ip_hash;
server application_application_1:8081 fail_timeout=0;
server application_application_2:8081 fail_timeout=0;
keepalive 64;
}
server {
listen 8080;
server_name loadbalancer;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
#Timeout after 8 hours
proxy_read_timeout 43200000;
proxy_connect_timeout 43200000;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://application;
break;
}
}
}
我得到:
2016/02/15 08:42:07 [emerg] 21#0: host not found in upstream "application_application_1:8081" in /etc/nginx/sites-enabled/default:3
2016/02/15 08:42:10 [emerg] 22#0: host not found in upstream "application_application_1:8081" in /etc/nginx/sites-enabled/default:3
如何使用主机或 IP 地址定义我的 nginx 配置?我没有使用 IP 地址,因为 docker 可能会从已知范围分配不同的 IP。有什么建议么?我应该在一个 docker-compose.yml 文件中启动所有这些吗?
您是否在 docker-compose.yml 文件中定义了指向 application_application_1 的链接?
链接成功了: