ECSインスタンス(Nginx,Railsコンテナ)にアクセスすると、「502 Bad Gateway」という表示が出ます。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,491
前提
【ローカル開発環境】
ローカルで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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
ECSのタスク定義で、RailsコンテナとNginxコンテナのリンク設定、NginxコンテナがRailsコンテナ内を参照できるボリューム設定がしっかりとできていませんでした。
docker-compose.ymlファイルの内容を、ECSのタスク定義へしっかりと反映しきれていなかったことが原因です。
Dockerコンテナ・ボリュームに関してしっかりと理解すべきだと実感しました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
yu_1985
2020/03/06 14:43
Dockerfileでボリュームマウントしていますが、きちんとボリュームマウントできているのか、またマウントできているのならそこに必要なソースは配置されていますか?
ファイルのツリー一覧にRailsのソースが含まれていないのが気になります。
rubicon44
2020/03/06 15:14
ご回答ありがとうございます。
ファイルツリー一覧は、開発環境でコンテナを立ち上げる前の”初期フォルダ・ファイル構成”です。
開発環境でコンテナを立ち上げた際、ECSでEC2コンテナを立ち上げた際には、しっかりとRailsのソースは含まれております。
わかりづらくて申し訳ございません!