簡體   English   中英

無法從主機訪問Docker容器

[英]Can't access docker containers from host

我有一個使用以下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中得到正確的響應。

有誰知道為什么我無法從主機訪問容器?

我在此版本的Mac上使用Docker:

$ docker -v
Docker version 18.03.1-ce, build 9ee9f40

默認情況下,某些版本的Rails綁定到localhost,這說明了為什么您可以從容器內部而不是主機(它被視為另一台主機)進行訪問。

CMD指令中添加-b 0.0.0.0應該可以解決該問題。

嘗試:

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. 重置網絡適配器注: 這不是故意的,因此不確定是否是此修復程序的一部分,但想以防萬一。

不幸的是,我不確定哪一步可以解決問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM