【问题标题】:App running in Docker container on port 4567 can't be accessed from the outside无法从外部访问在 4567 端口上的 Docker 容器中运行的应用程序
【发布时间】:2017-01-12 13:37:12
【问题描述】:

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

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

docker-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 应用程序?

【问题讨论】:

  • 不,您的端口已正确公开且映射良好。这应该足够了。如果您在尝试 curl 时可以从 python exec 打印某些内容,您应该会看到它的响应。你在当地尝试什么卷曲?
  • 我以前也遇到过类似的问题。尝试在容器内使用 wget 而不是 curl
  • curl -v 会给你更多的输出吗?也许这是来自外部的代理/DNS问题?那就试试curl -v --noproxy 127.0.0.1吧。
  • @Ben 这就是我建议wget 的原因,它可以很容易地检测它是否是代理问题。
  • @Ben, curl -v 返回: curl -v localhost:5000 * Rebuilt URL to: localhost:5000/ * Trying ::1... * Connected to localhost (::1) port 5000 (#0) > GET / HTTP/1.1 > Host: localhost:5000 > User-Agent: curl/7.43.0 > Accept: */* > * Empty reply from server * Connection #0 to host localhost left intact curl: (52) Empty reply from server

标签: docker docker-compose dockerfile


【解决方案1】:

Sinatra 绑定到错误的接口。 通过添加-o 开关修复。

CMD ruby hei.rb -p 4567 -o 0.0.0.0

【讨论】:

  • -o是什么意思
  • @hakiko -o 开关用于指定绑定到哪个接口。参考文档sinatrarb.com/…
【解决方案2】:

如果没有给环境变量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"]

【讨论】:

  • 虽然此代码可能会解决问题,但 including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
  • 请重新阅读我的帖子。它包含一个完整的示例。
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2021-05-12
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多