簡體   English   中英

Dockernized Nginx +(Rails + Unicorn)+ Redis + PostgreSQL:connect()失敗(111:連接被拒絕)

[英]Dockernized Nginx + (Rails+Unicorn)+Redis+PostgreSQL:connect() failed (111: Connection refused)

我正在嘗試使用docker-compose運行4個容器(Nginx +(Rails + Unicorn)+ Redis + PostgreSQL),但是它不起作用。我檢查了Dockerfile和nginx.conf無法解決Nginx連接拒絕問題(找不到404)瀏覽器)。

[error] 8#8: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.99.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://172.17.0.95:3000/", host: "192.168.99.100:8080"

我的Dockerfile

FROM ruby:2.1.5

RUN apt-get update && apt-get install -y nodejs mysql-client --no-install-recommends && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY Gemfile /usr/src/app/
COPY Gemfile.lock /usr/src/app/
COPY config/environments/development.rb /usr/src/app/
COPY config/environments/production.rb /usr/src/app/
COPY config/environments/test.rb /usr/src/app/

RUN bundle install

ADD . /usr/src/app

EXPOSE 3000
CMD ["bundle", "exec", "unicorn", "-c", "config/unicorn.rb"]

docker-compose.yml

db:
  image: postgres
  ports:
    - '5432:5432'
  volumes_from:
    - datastore

redis:
  image: redis:2.8.19
  ports:
    - '6379:6379'
  volumes_from:
    - datastore

nginx:
  build: containers/nginx
  ports:
    - '8080:80'
  volumes_from:
    - datastore
  links:
    - rails

datastore:
  build: containers/datastore

rails:
  build: .
  ports:
    - '3000:3000'
  environment:
    DATABASE_URL: postgres://postgres@db:5432
    REDIS_URL: redis://redis:6379
    #SECRET_KEY_BASE: hogehoge
  volumes_from:
    - datastore
  links:
    - db
    - redis

containers/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
  worker_connections 1024; # increase if you have lots of clients
  accept_mutex off; # "on" if nginx worker_processes > 1
}

http {
  include mime.types;
  default_type application/octet-stream;
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/nginx/access.log  main;

  sendfile on;

  tcp_nopush on; # off may be better for *some* Comet/long-poll stuff
  tcp_nodelay off; # on may be better for some Comet/long-poll stuff

  gzip on;
  gzip_http_version 1.0;
  gzip_proxied any;
  gzip_min_length 500;
  gzip_disable "MSIE [1-6]\.";
  gzip_types text/plain text/html text/xml text/css
             text/comma-separated-values
             text/javascript application/x-javascript
             application/atom+xml;

  upstream app_server {
    # for UNIX domain socket setups:
    # server unix:/path/to/.unicorn.sock fail_timeout=0;

    # for TCP setups, point these to your backend servers
    # server 192.168.0.7:8080 fail_timeout=0;
    server rails:3000 fail_timeout=0;
  }

  server {
    listen       80;
    server_name  localhost;
    client_max_body_size 4G;
    keepalive_timeout 5;

    # path for static files
    root /usr/src/app/public;

    try_files $uri/index.html $uri.html $uri @app;

    location @app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://app_server;
    }

    # Rails error pages
    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /usr/src/app/public;
    }
  }
}

containers/nginx/Dockerfile

FROM nginx:1.9.6
COPY nginx.conf /etc/nginx/nginx.conf

感謝您在此問題上的任何幫助。

我認為問題是您的配置中的fail_timeout=0 當rails容器啟動時,它需要花費幾毫秒的啟動時間(可能更長)。 因此,nginx需要重試一段時間。 我相信您已將超時設置為0。如果將其配置為重試幾秒鍾,我認為它可能會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM