无法从外部访问在端口4567上在Docker容器中运行的应用程序

时间:2017-01-12 13:37:12

标签: docker docker-compose dockerfile

使用重新创建设置所需的所有文件更新帖子。 - 仍然是同样的问题。无法访问在容器中运行的服务。

FROM python:3

RUN apt-get update
RUN apt-get install -y ruby rubygems
RUN gem install sinatra

WORKDIR /app
ADD . /app/

EXPOSE 4567
CMD ruby hei.rb -p 4567

hei.rb

require 'sinatra'

get '/' do
  'Hello world!'
end

搬运工-compose.yml

version: '2'

services:
  web:
    build: .
    ports:
      - "4567:4567"

我通过运行docker-compose up --build . 开始派对 docker ps 返回: 0.0.0.0:4567->4567/tcp

仍然没有来自端口4567的响应。使用来自主机的curl进行测试。

$ curl 127.0.0.1:4567 # and 0.0.0.0:4567

localhost:4567在容器内回复

$ docker-compose exec web curl localhost:4567
Hello world!%`

如何才能访问在端口4567上运行的Sinatra应用程序?

2 个答案:

答案 0 :(得分:2)

Sinatra绑定到错误的界面。 通过添加CMD ruby hei.rb -p 4567 -o 0.0.0.0开关来修复。

{{1}}

答案 1 :(得分:0)

如果没有为环境变量APP_ENV分配任何值(通过(ENV ['APP_ENV']),则默认环境为“ :development

在启用了运行设置的开发环境中,默认情况下,sinatra绑定到运行计算机的localhost接口。

为了使此服务在此网络之外可用,它需要在运行环境中的所有接口上进行侦听。您可以通过将默认绑定地址更新为“ 0.0.0.0”来实现此目的

FROM ruby:latest
WORKDIR /usr/src/app/
ADD . /usr/src/app/
RUN bundle install
EXPOSE 4567
CMD ["ruby","app.rb","-o", "0.0.0.0"]