ruby-on-rails - 无法从主机访问 docker 容器

标签 ruby-on-rails docker portforwarding

我有一个带有以下 Dockerfile 的 Rails 服务的简单图像:

FROM ruby:2.4.4
MAINTAINER sadzid.suljic@gmail.com

RUN apt-get update && apt-get install -y \
    build-essential \
    nodejs

RUN mkdir /app
WORKDIR /app

COPY Gemfile Gemfile.lock ./
RUN gem install bundler && bundle install

COPY . ./

EXPOSE 3000

CMD ["rails", "s", "-p", "3000"]

我构建了镜像并使用以下命令运行了容器:
docker build -t chat/users .
docker run -P --name users_service chat/users

我在主机上有这个输出:
 $ docker ps
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
 23716591e656        chat/users          "rails s -p 3000"   6 minutes ago       Up 5 minutes        0.0.0.0:32774->3000/tcp   users_service

$ lsof -n -i :32774 | grep LISTEN
com.docke 32891 ssuljic   18u  IPv4 0x41c034d5d4627f5f      0t0  TCP *:filenet-re (LISTEN)
com.docke 32891 ssuljic   19u  IPv6 0x41c034d5d3beb9b7      0t0  TCP [::1]:filenet-re (LISTEN)

$ curl localhost:32774
curl: (52) Empty reply from server

当我运行 curl localhost:3000在容器内,我从我的 API 获得了正确的响应。

有谁知道为什么我不能从我的主机访问容器?

我在这个版本中使用 Docker for Mac:
$ docker -v
Docker version 18.03.1-ce, build 9ee9f40

最佳答案

某些版本的 Rails 默认绑定(bind)到 localhost,这解释了为什么您可以从容器内访问,但不能从主机(它被视为不同的主机)访问。

添加 -b 0.0.0.0CMD指令应该可以解决问题。

关于ruby-on-rails - 无法从主机访问 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51342953/

相关文章:

Docker 错误的所有者或权限/root/.ssh/config

java - Java中使用JSch转发端口时的"local port ... cannot be bound"

java - JSch - 如何使用 PortForwarding L 从远程服务器捕获流?

ruby-on-rails - 如何在与 rails 的 session 中设置多维数组

javascript - 如何使用 JQuery 关闭此对话框?使用 CoffeeScript ?

html - 无法在 Ruby on Rails 元素中使用 css 类

ruby-on-rails - 提交不允许的参数时如何引发异常?

python - Docker和Django –使所有内容保持最新和安全

docker - 当 docker 主机重启时会发生什么?

amazon-web-services - AWS将elb的8000端口转发到EC2的8000端口