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

mar*_*ins 2 docker dockerfile docker-compose

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

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
Run Code Online (Sandbox Code Playgroud)

hei.rb

require 'sinatra'

get '/' do
  'Hello world!'
end
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '2'

services:
  web:
    build: .
    ports:
      - "4567:4567"
Run Code Online (Sandbox Code Playgroud)

我通过运行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
Run Code Online (Sandbox Code Playgroud)

localhost:4567 在容器内回复

$ docker-compose exec web curl localhost:4567
Hello world!%`
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能访问在端口 4567 上运行的 Sinatra 应用程序?

mar*_*ins 8

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

CMD ruby hei.rb -p 4567 -o 0.0.0.0