gpt4 book ai didi

ruby - Nginx似乎在Docker中的Sinatra应用程序上崩溃

转载 作者:行者123 更新时间:2023-12-02 19:39:43 25 4
gpt4 key购买 nike

Dockerfile:

FROM ruby:2.3.1-slim
MAINTAINER Marc Lacoursiere <marc@roosoft.com>

RUN apt-get update && apt-get install -yq nginx

RUN rm /etc/nginx/sites-enabled/default
ADD docker/sinatra.conf /etc/nginx/sites-enabled/sinatra.conf

RUN adduser app --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
RUN mkdir /home/app/webapp

WORKDIR /tmp
COPY app/Gemfile /tmp/
COPY app/Gemfile.lock /tmp/
RUN bundle install

COPY app /home/app/webapp
RUN chown -R app:app /home/app

CMD ["nginx", "-g", "daemon off;"]
CMD ["ruby", "/home/app/webapp/app.rb"]

Sinatra.conf:
upstream app {
server 127.0.0.1:4000;
}

server {
listen 80 default_server;
server_name localhost;

error_log /var/log/nginx/localhost.error_log info;

location / {
proxy_pass http://app;
}
}

app.rb
require 'sinatra'
require 'sinatra/json'

set :port, 4000

get '/' do
json 'Hello World!'
end

gem 文件:
source 'https://rubygems.org'

gem 'sinatra', '1.4.6'
gem 'sinatra-contrib', '~> 1.4.2'

它如何在bash中执行
docker run -p 4444:80 roosoft/sinatra-example

简而言之,我应该得到一个sinatra应用程序来回答容器的端口4000。Nginx正在监听容器的端口80,并返回它在sinatra应用程序的端口4000上找到的内容。容器的端口80重定向到本地端口4444。但是端口4444返回:
curl: (52) Empty reply from server

那时,由于某些晦涩的原因,nginx没有在容器中运行。要修复它,我只需要登录到容器中,键入 service nginx start,一切都很好。我可以从容器中注销,本地端口4444返回预期的结果。

如果我注释掉最后一个Dockerfile行,重建并重新启动容器,则容器的端口4000中没有运行任何sinatra应用程序,但是nginx这次正在运行!当我运行sinatra时,好像nginx被杀死了。

我究竟做错了什么?我显然希望两者同时运行...

最佳答案

一个Dockerfile(https://docs.docker.com/engine/reference/builder/#/cmd)中不能有多个CMD语句。如果查看docker build的输出,则可以看到每个CMD都会创建一个新图像。每个CMD都会覆盖上一个图像中指定的那个。

如果要在Docker容器中运行多个进程,可以使用supervisord之类的进程管理器。如果发生故障, super 用户还可以帮助您自动重新启动进程。有关如何完成此操作的教程,请参见以下网址:

https://docs.docker.com/engine/admin/using_supervisord/

另一个(也是IMHO更加清洁的)解决方案是启动两个容器。一种用于Sinatra应用程序,另一种用于Nginx。只需将两个容器链接在一起(docker create --link ...)或建立一个网络(docker network create ...)并将两个容器都连接到它(docker create --network ...)。

关于ruby - Nginx似乎在Docker中的Sinatra应用程序上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39107759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com