未能在Docker容器内为Dancer2应用程序执行nginx proxy_pass指令

时间:2016-10-16 13:01:44

标签: perl nginx docker docker-compose dancer

我尝试使用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;

    }       

 }


}   

1 个答案:

答案 0 :(得分:0)

您使用服务名称作为Nginx的upstream服务器是正确的,但您需要指定端口:

upstream pb{
    server pearlbee:5000;
}

在Docker网络中--Compose为您创建 - 服务可以按名称相互访问。此外,您不需要发布要使用的其他容器的端口,除非您还想在外部访问它们。 Nginx容器将能够访问您的应用容器上的端口5000,您无需将其发布到主机。