naota7118 / ocr_check_app

0 stars 0 forks source link

no such service: RAILS_ENV=production(EC2内でDockerコンテナ起動) #31

Closed naota7118 closed 3 months ago

naota7118 commented 3 months ago

問題

EC2内でDockerコンテナを起動しようとして、本番環境を指定箇所でエラーが出た。 echo ${SUDO_PASS} | sudo -S docker-compose up --build RAILS_ENV=production &&

スクリーンショット 2024-08-02 午後5 36 13

原因

本番環境の指定方法が間違っていると考えられる。
RAILS_ENV=productiondocker-compose.yamlのサービス名だと認識され、「そんなサービス名は見当たらない」と言われる。

やったこと

screen -dm echo RAILS_ENV=production ${SUDO_PASS} | sudo -S docker-compose -f docker-compose.yaml -f docker-compose-prod.yaml up -d --build &&

docker-compose-prod.yamlではアセットプリコンパイルを追加した。

services:
  rails:
    command: bash -c "rails assets:precompile && rails s -b 0.0.0.0"

結果

スクリーンショット 2024-08-02 午後6 42 11
naota7118 commented 3 months ago

問題

ホストのポート80がすでに別のプロセスが動いていて使えないと言われる。

スクリーンショット 2024-08-02 午後6 42 11

原因

Apacheがポート80で待ち受けているから。
これはアプリ内のapache/conf.d/httpd.confでの設定ではなく、最初にEC2にログインしてApacheの設定を行ったときの/etc/httpd/conf/httpd.confの設定によるもの。

docker-compose.yamlでボリュームマウント指定しているから、apache/conf.d/httpd.confでした。

やったこと

ホストのApacheのポートを80から8080に変更。 apache/conf.d/http.confLitsten 80からLitsten 8080に変更。 docker-compose-prod.yamlのポート設定を変更。

services:
  apache:
    image: httpd:latest
    ports:
      - "8080:80"

結果

エラーは変わらなかった。

スクリーンショット 2024-08-03 午前10 55 52
naota7118 commented 3 months ago

netstat -tuln | grep :80でポートの使用状況を調べた結果↓

tcp6       0      0 :::80                   :::*                    LISTEN 
naota7118 commented 3 months ago

lsof -i :80でどのプログラムがポート80で動いているのか調べた結果↓

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1983   root    3u  IPv6  16114      0t0  TCP *:http (LISTEN)
httpd   1990 apache    3u  IPv6  16114      0t0  TCP *:http (LISTEN)
httpd   1991 apache    3u  IPv6  16114      0t0  TCP *:http (LISTEN)
httpd   1992 apache    3u  IPv6  16114      0t0  TCP *:http (LISTEN)
httpd   3247 apache    3u  IPv6  16114      0t0  TCP *:http (LISTEN)
naota7118 commented 3 months ago

解決した方法

ホスト(EC2)のポートを8080に変更した。 httpd.confListen 80Listen 8080に変更した。

zennにドキュメントを残した↓ https://zenn.dev/nao3434/articles/1c90a63d8e3662

結果

ホストのポート80への通信がApacheコンテナのポート80にバインドされた。

スクリーンショット 2024-08-03 午後2 13 13