【问题标题】:Can't access docker containers from host无法从主机访问 docker 容器
【发布时间】:2018-07-14 20:04:56
【问题描述】:

我有一个带有以下 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

【问题讨论】:

标签: ruby-on-rails docker portforwarding


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    试试:

    docker run -p 3000:3000 --name users_service chat/users
    

    这会将 3000 映射到 3000

    http://localhost:3000
    

    仔细研究一下,我认为这是 chrome 问题或网络问题,因为我遇到了同样的问题:

    这是我的解决方法:

    1. 确保您的 /etc/hosts 文件具有 127.0.0.1 localhost(很可能已经存在)

    2. 清除 Cookie 和缓存文件

    3. 清除主机缓存

      转到:chrome://net-internals/#dns点击清除主机缓存

    4. 重启 chrome

    5. 重置网络适配器 注意: 这是无意的,所以不确定它是否是修复的一部分,但想包括它以防万一。

    很遗憾,我不确定哪个步骤解决了问题

    【讨论】:

    • 感谢您的回答!在主机上运行 curl localhost:3000 时,我收到相同的错误 curl: (52) Empty reply from server
    • 刚刚意识到我混淆了我正在研究的 2 个不同但非常相似的问题。但是,此答案适用于同一问题,尽管另一个问题是在节点/快速应用程序中
    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多