如何在主机上运行nginx运行docker容器中的rails应用程序?

我正在处理需要的场景:1.在主机上运行的nginx 2.在docker容器中运行的rails应用程序

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

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,所以它被configuration为查看主机上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; } 

我能够build立docker图像,我的下一个想法如下:1.运行“rails容器”时声明/ 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模式。 任何想法我做错了什么?

在此先感谢,Bakir

你需要在你的Dockerfile中有一个CMD指令。 这是启动Docker容器时运行的命令。 如果你不指定一个命令,它会运行你的FROM图像使用的任何东西,如果你看Ruby Docker镜像 ,你可以看到它是'irb'。

您可以在Docker文档中阅读更多关于CMD指令和Dockerfiles的其他信息。