我尝试使用Docker-compose编排一个在Dancer2
上运行的starman
应用。我未能将nginx
崩溃与502 Bad Gateway
错误进行整合。
在我的服务器里面看起来像这样:
*1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.22.0.1,
我的docker-compose文件如下所示:
version: '2'
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
links:
- pearlbee
volumes_from:
- pearlbee
pearlbee:
build: pearlbee
command: carton exec starman bin/app.psgi
ports:
- "5000:5000"
environment:
- MYSQL_PASSWORD=secret
depends_on:
- mysql
mysql:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_USER=root
我的nginx.conf
文件如下所示:
user root nogroup;
worker_processes auto;
events { worker_connections 512; }
http {
include /etc/nginx/sites-enabled/*;
upstream pb{
# this the localhost that starts starman
#server 127.0.0.1:5000;
#the name of the docker-compose service that creats the app
server pearlbee;
#both return the same error mesage
}
server {
listen *:80;
#root /usr/share/nginx/html/;
#index index.html 500.html favico.ico;
location / {
proxy_pass http://pb;
}
}
}
答案 0 :(得分:0)
您使用服务名称作为Nginx的upstream
服务器是正确的,但您需要指定端口:
upstream pb{
server pearlbee:5000;
}
在Docker网络中--Compose为您创建 - 服务可以按名称相互访问。此外,您不需要发布要使用的其他容器的端口,除非您还想在外部访问它们。 Nginx容器将能够访问您的应用容器上的端口5000,您无需将其发布到主机。