Ad

【Docker,Rails】ERR_CONNECTION_REFUSED" Occurs When Accessing A Public IP Address In EC2

- 1 answer

Want to achieve

I have created an infrastructure (application) using AWS, Docker (docker-compose), and Rails.
After launching the container in EC2 and starting the rails server, I get "ERR_CONNECTION_REFUSED" when I access the public IP address.
I would like to know how to display the application screen.

Details

Directory structure

kthr01/
  docker-compose.yml
  Dockerfile
  start.sh
  src/
    app/
     bin/
     ....

Files

Dockerfile

FROM ruby:2.7

ENV RAILS_ENV=production

RUN 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 -qq \
  && apt-get install -y nodejs yarn \
  && apt-get install -y vim
WORKDIR /app
COPY ./src /app
RUN bundle config --local set path 'vendor/bundle' \
  && bundle install

COPY start.sh /start.sh
RUN chmod 744 /start.sh
CMD ["sh", "/start.sh"]

docker-compose.yml

version: '3'
services:
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - ./src/db/mysql_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - ./src:/app
    ports:
      - "3000:3000"
    depends_on:
      - db

start.sh

#!/bin/sh

if [ "${RAILS_ENV}" = "production" ]
then
    bundle exec rails assets:precompile
fi
bundle exec rails s -p ${PORT:-3000} -b 0.0.0.0

EC2 Security Group

enter image description here

Procedure

Verify that the container is created in the local environment and appears correctly on localhost:3000

Connect to EC2 via ssh

git clone

docker-compose build

docker-compose up
...
web_1  | => Booting Puma
web_1  | => Rails 6.1.4.4 application starting in production
web_1  | => Run `bin/rails server --help` for more startup options
web_1  | Puma starting in single mode...
web_1  | * Puma version: 5.6.1 (ruby 2.7.5-p203) ("Birdie's Version")
web_1  | *  Min threads: 5
web_1  | *  Max threads: 5
web_1  | *  Environment: production
web_1  | *          PID: 1
web_1  | * Listening on http://0.0.0.0:3000
web_1  | Use Ctrl-C to stop


Access the public IP address of EC2

ERR_CONNECTION_REFUSED is displayed

I may have left out some important steps due to my lack of experience. Thank you very much for your help.

Ad

Answer

Based on the comments.

The issue was blocked port 3000 in a security group. The solution was to allow that port.

Ad
source: stackoverflow.com
Ad