如何在主机上运行nginx的docker容器中运行rails app?

时间:2017-07-08 17:31:48

标签: ruby-on-rails nginx docker

我正在处理我需要的场景: 1. nginx在主机上运行 2.在docker容器内运行的rails app

我最初的工作包括将Dockerfile添加到主机上的rails app目录中,如下所示:

ubuntu@ubuntu-xenial:~/rails_docker$ cat Dockerfile
FROM ruby:2.1-onbuild

ENV HOME /home/rails/webapp

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

WORKDIR $HOME

# Install gems
ADD Gemfile* $HOME/
RUN bundle install

# Add the app code
ADD . $HOME

EXPOSE 8080
EXPOSE 5432

由于我已在主机上安装了nginx,因此配置为查看主机上存在rails应用程序的目录:

ubuntu@ubuntu-xenial:~$ cat /etc/nginx/sites-available/www.testblog.io.conf
# MANAGED BY PUPPET
server {
  listen *:8080;
  server_name           www.testblog.io;

  index  index.html index.htm index.php;

  access_log            /var/log/nginx/www.testblog.io.access.log combined;
  error_log             /var/log/nginx/www.testblog.io.error.log;

  location / {
    root      /home/ubuntu/rails_docker/public;
    index     index.html index.htm index.php;
  }
  passenger_enabled on;
  passenger_ruby /usr/local/rvm/wrappers/default/ruby;
} 

我能够构建泊坞窗图像,我的下一个想法是: 1.在运行" rails container"时,将/ home / ubuntu / rails_docker声明为主机卷。 2.暴露端口8080:8080和5432:5432

我使用的命令如下:

ubuntu@ubuntu-xenial:~/rails_docker$ docker run -d -p 8080:8080 --name examplerails -v /home/ubuntu/rails_docker:/home/rails/webapp railsapptest
82c8aa45b8c1a405e198a565feabf105d1afcbb1c37f8b7b11bf764395ed8c4e

检查日志时:

ubuntu@ubuntu-xenial:~/rails_docker$ docker logs -f examplerails
Switch to inspect mode.

出于某种原因,它进入了irb模式。知道我做错了吗?

提前致谢, 巴克尔

1 个答案:

答案 0 :(得分:0)

您需要在Dockerfile中使用 CMD 指令。这是启动Docker容器时运行的命令。如果您没有指定命令,它将运行 FROM 图像使用的任何内容,如果您查看the Ruby docker image,则可以看到“irb”。

您可以在the Docker documentation中详细了解 CMD 指令以及有关Dockerfiles的所有其他内容。