Debug rails app inside docker use Intellij/Rubymine

I’m start working rails development with Docker.
Currently, I follow some tutorial to setup development environment.
Everything work well. (for build, run).
But now, I want to setup Ruby Remote SDK for Rubymine, so I installed SSH on docker container (the ruby container; I INSTALLED SSH BECAUSE IT’S NEEDED FOR SETTING REMOTE SDK).

Here is Dockerfile

  • How can I start Nginx with php-fpm based on Ubuntu image using Dockerfile?
  • Docker containers cannot connect through overlay networks
  • Docker nginx reverse proxy returns 502 bad gateway “connection refused while connecting to upstream”
  • Installing Docker into Vagrant VM failed
  • Rake task seems not to write files in a Docker container
  • Docker within PCF - unable to connect to rabbitmq via AMQP (spring cloud bus)
  • FROM ruby:2.2.0
    # Install package
    RUN apt-get update -qq && apt-get install -y \
        build-essential \
        libpq-dev \
        nodejs \
        openssh-server
    
    # Setting sshd
    RUN mkdir /var/run/sshd
    RUN echo 'root:root' | chpasswd
    RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
    RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
    
    # SSH login fix. Otherwise user is kicked off after login
    RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
    
    ENV NOTVISIBLE "in users profile"
    RUN echo "export VISIBLE=now" >> /etc/profile
    EXPOSE 22
    CMD ["/usr/sbin/sshd", "-D"]
    
    RUN mkdir /myapp
    WORKDIR /myapp
    ADD Gemfile /myapp/Gemfile
    ADD Gemfile.lock /myapp/Gemfile.lock
    RUN bundle install
    ADD . /myapp
    

    And docker-compose.yml

    version: '2'
    services:
      db:
        image: postgres
      web:
        build: .
        command: bundle exec rails s -p 3000 -b '0.0.0.0'
        volumes:
          - .:/myapp
        ports:
          - "3000:3000"
          - "22"
        depends_on:
          - db
    

    (For ssh -> in flow this link https://docs.docker.com/engine/examples/running_ssh_service/)

    Then I connect ssh to the container.
    Here is my steps:

    1. Get port of ssh:

      docker port demorailsdocker_web_1

      # Here is result

      22/tcp -> 0.0.0.0:32768

      3000/tcp -> 0.0.0.0:3000

    2. Connect ssh to container

      ssh root@localhost -p 32768

      # Result
      ssh_exchange_identification: Connection closed by remote host

    I figure out the problem is related to setup in Dockerfile.

    Because when I remove those lines in docker file:

    RUN mkdir /myapp
    WORKDIR /myapp
    ADD Gemfile /myapp/Gemfile
    ADD Gemfile.lock /myapp/Gemfile.lock
    RUN bundle install
    ADD . /myapp
    

    And remove those lines in docker-compose.yml

     volumes:
          - .:/myapp
    

    Then I can connect to SSH.

    I think the problem is about setting work dir.


    I can connect SSH well to the container by removed this line in docker-compose.yml

    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    

    So I think the problem is about rails.
    But I don’t know how to fix it.

  • AWS Elastic Beanstalk Docker environment variables
  • Docker - Execute a bash when running a container
  • Docker best practice on base images and host os
  • How to add PRE deployment script to AWS Elastic Beanstalk Docker EC2 instance, custom AMI not working
  • Check Resources Used by each Docker Container
  • Create docker image to run selenium tests on different browser versions
  • One Solution collect form web for “Debug rails app inside docker use Intellij/Rubymine”

    Best I can tell you debug Ruby/Rails containers without the need to SSH in with the ruby-debug-ide gem that is made specifically for remote debugging:

    GEM: https://github.com/ruby-debug/ruby-debug-ide

    HOW TO: http://bzzt.io/posts/running-the-rails-debugger-in-a-docker-container-using-rubymine

    You could also use this Dockerfile that sets up SSH correctly that will allow you to remotely connect to your web container:

    GitHub: https://github.com/zchee/docker-rubymine

    Dockerfile: https://github.com/zchee/docker-rubymine/blob/master/Dockerfile

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.