質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.22%

ECSインスタンス(Nginx,Railsコンテナ)にアクセスすると、「502 Bad Gateway」という表示が出ます。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,491

rubicon44

score 4

前提

【ローカル開発環境】
ローカルでDockerを用いて、
WebサーバーにNginx、バックエンドにRailsを用いて、PumaとNginxをソケット通信させ開発を行っております。

※ローカルの開発環境では、PumaとNginxの通信はできております。

【AWS本番環境】
ECRにRailsとNginxのイメージをPushし、ECSでコンテナを起動させました。

※ECSのタスク定義で、Railsコンテナのポートに「host:未設定,コンテナ:未設定」、Nginxコンテナのポートに「host:80,コンテナ:80」を設定

※Nginxコンテナのネットワーク設定の「リンク」で、「grow-rails:grow-rails」と入力し、PumaとNginxとを連携

エラー内容・解決したいこと

起動したECSインスタンスのパブリックDNSにアクセスすると、「502 Bad Gateway」という表示が出ました。

どなたか解決方法を教えてくださいましたら幸いです。
よろしくお願いいたします。

試したこと

  • nginx.confの「servername」をECSコンテナのDNS名に変更したがエラーは解消されず

  • 稼働しているECSインスタンス内のNginxコンテナにssh接続し、Nginxのアクセスログ・エラーログを確認したが何も出力されなかった

開発環境構成図(初期フォルダ・ファイル)

.
├── containers
│   └── nginx
│       └── Dockerfile
│       └── nginx.conf   
│  
└── docker-compose.yml
└── Dockerfile
└── Gemfile
└── Gemfile.lock

ソースコード

【Dockerfile(Rails用)】
FROM ruby:2.6.0

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update -qq && apt-get install -y build-essential nodejs npm

RUN apt-get update && apt-get install -y curl apt-transport-https wget && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && apt-get update && apt-get install -y yarn

RUN mkdir /grow-rails
ENV APP_ROOT /grow-rails
WORKDIR $APP_ROOT

COPY ./Gemfile $APP_ROOT/Gemfile
COPY ./Gemfile.lock $APP_ROOT/Gemfile.lock

RUN bundle install

COPY . $APP_ROOT

RUN mkdir -p tmp/sockets tmp/pids

VOLUME /grow-rails/public
VOLUME /grow-rails/tmp
EXPOSE  3000

CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]
【Dockerfile(Nginx)】
FROM nginx:1.15.8

RUN rm -f /etc/nginx/conf.d/*

COPY nginx.conf /etc/nginx/conf.d/grow-rails.conf

CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

EXPOSE 80
【nginx.conf】
upstream grow-rails {
  server unix:///grow-rails/tmp/sockets/puma.sock;
}

server {
  listen 80;
  server_name localhost;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  root /grow-rails/public;

  client_max_body_size 100m;
  error_page 404             /404.html;
  error_page 505 502 503 504 /500.html;
  try_files  $uri/index.html $uri @grow-rails;
  keepalive_timeout 5;

  location @grow-rails {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://grow-rails;
  }
}
【docker-compose.yml】
version: "3"
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 任意のパスワード
      MYSQL_USER: 任意のユーザー名
    volumes:
      - db-data:/var/lib/mysql
    ports:
      - "3306:3306"

  app:
    build: .
    command: bundle exec puma -C config/puma.rb
    volumes:
      - .:/grow-rails
      - public-data:/grow-rails/public
      - tmp-data:/grow-rails/tmp
      - log-data:/grow-rails/log
    ports:
      - "3000:3000"
    links:
      - db
    tty: true
    stdin_open: true

  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/grow-rails/public
      - tmp-data:/grow-rails/tmp
    ports:
      - 80:80
    depends_on:
      - app
volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:

補足情報(FW/ツールのバージョンなど)

【開発環境】
ruby:2.6
Rails:5.2.4.1
nginx:1.15.8

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yu_1985

    2020/03/06 14:43

    Dockerfileでボリュームマウントしていますが、きちんとボリュームマウントできているのか、またマウントできているのならそこに必要なソースは配置されていますか?
    ファイルのツリー一覧にRailsのソースが含まれていないのが気になります。

    キャンセル

  • rubicon44

    2020/03/06 15:14

    ご回答ありがとうございます。

    ファイルツリー一覧は、開発環境でコンテナを立ち上げる前の”初期フォルダ・ファイル構成”です。
    開発環境でコンテナを立ち上げた際、ECSでEC2コンテナを立ち上げた際には、しっかりとRailsのソースは含まれております。

    わかりづらくて申し訳ございません!

    キャンセル

回答 1

check解決した方法

0

ECSのタスク定義で、RailsコンテナとNginxコンテナのリンク設定、NginxコンテナがRailsコンテナ内を参照できるボリューム設定がしっかりとできていませんでした。

docker-compose.ymlファイルの内容を、ECSのタスク定義へしっかりと反映しきれていなかったことが原因です。
Dockerコンテナ・ボリュームに関してしっかりと理解すべきだと実感しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/06 21:08 編集

    質問させていただいたのですが、自己解決しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • nginxに関する質問
  • ECSインスタンス(Nginx,Railsコンテナ)にアクセスすると、「502 Bad Gateway」という表示が出ます。