我构建了一个简单的sinatra应用程序,该应用程序在localhost上侦听POST请求(来自AWS SQS的传入消息),并配置了一个dockerfile以便于部署。
锡纳特拉:
set :environment, 'staging'
set :bind, 'localhost'
set :port, '80'
before do
request.body.rewind
@request_payload = JSON.parse request.body.read
end
post '/' do
# do stuff with payload
end
Dockerfile:
#https://dockerfile.github.io/#/ruby
FROM dockerfile/ruby
# Install dependencies
RUN apt-get update
RUN apt-get install postgresql-common postgresql-9.3 libpq-dev -y
# Copy the Gemfile and Gemfile.lock into the image to cache bundle install
# Temporarily set the working directory to where they are
WORKDIR /tmp
ADD ./Gemfile Gemfile
ADD ./Gemfile.lock Gemfile.lock
RUN bundle install
# Copy code into the image
ADD . /code
WORKDIR /code
# Open port 80
EXPOSE 80
# Clean up
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Default runtime command
CMD /code/launcher.rb
但是我在日志文件中收到这些错误:
-------------------------------------
/var/log/nginx/error.log
-------------------------------------
2014/07/11 20:54:33 [error] 9023#0: *11 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: , request: "POST / HTTP/1.1", upstream: "http://127.0.0.1:12569/", host: "localhost"
-------------------------------------
/var/log/docker
-------------------------------------
2014/07/11 20:54:33 Can't forward traffic to backend tcp/172.17.0.8:80: dial tcp 172.17.0.8:80: connection refused
-------------------------------------
/var/log/aws-sqsd/default.log
-------------------------------------
2014-07-11T21:19:35Z http-err: d35bffd4-5c0b-4979-b046-5b42c7a990c0 (6) 502 - 0.023
-------------------------------------
/var/log/nginx/access.log
-------------------------------------
127.0.0.1 - - [11/Jul/2014:21:19:35 +0000] "POST / HTTP/1.1" 502 172 "-" "aws-sqsd/1.1"
-------------------------------------
/var/log/docker-ps.log
-------------------------------------
'docker ps' ran at Fri Jul 11 21:11:52 UTC 2014:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3d8a8a3ffb6 aws_beanstalk/current-app:latest /bin/sh -c /code/bui About a minute ago Up About a minute 0.0.0.0:12529->80/tcp backstabbing_pare
有任何想法吗?我认为这与港口有关。我曾与他人尝试过,但没有成功...
最佳答案
set :bind, 'localhost'
指令是冲突。
由于POST请求来自docker容器外部,因此sinatra拒绝了连接。