Closed naota7118 closed 3 months ago
ホストのポート80がすでに別のプロセスが動いていて使えないと言われる。
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.conf
をLitsten 80
からLitsten 8080
に変更。
docker-compose-prod.yaml
のポート設定を変更。
services:
apache:
image: httpd:latest
ports:
- "8080:80"
エラーは変わらなかった。
netstat -tuln | grep :80
でポートの使用状況を調べた結果↓
tcp6 0 0 :::80 :::* LISTEN
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)
ホスト(EC2)のポートを8080に変更した。
httpd.conf
のListen 80
をListen 8080
に変更した。
zennにドキュメントを残した↓ https://zenn.dev/nao3434/articles/1c90a63d8e3662
ホストのポート80への通信がApacheコンテナのポート80にバインドされた。
問題
EC2内でDockerコンテナを起動しようとして、本番環境を指定箇所でエラーが出た。
echo ${SUDO_PASS} | sudo -S docker-compose up --build RAILS_ENV=production &&
原因
本番環境の指定方法が間違っていると考えられる。
RAILS_ENV=production
がdocker-compose.yaml
のサービス名だと認識され、「そんなサービス名は見当たらない」と言われる。やったこと
RAILS_ENV=production
の指定位置を変更した。docker-compose-prod.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
ではアセットプリコンパイルを追加した。結果