【问题标题】:Unable to connect localhost in docker无法在 docker 中连接本地主机
【发布时间】:2021-10-25 16:26:05
【问题描述】:

我在 docker 终端中运行图像:

docker run -p 4000:80 friendlyhello

Localhost 不连接和显示图像。

无法访问此网站
本地主机拒绝连接。
- 你的意思是http://localhost4000.org/
- 在 Google 上搜索 localhost 4000
ERR_CONNECTION_REFUSED

【问题讨论】:

  • 试试http://localhost:4000/
  • 那行不通。本地主机没有响应我在 Docker 中运行的任何图像。但它们适用于 Google AppEngine 等其他应用程序。
  • 您在哪里使用链接?在您的主机或容器中?如果你在宿主机上使用,这将不起作用。
  • 在我的主机中。我应该怎么做才能让它发挥作用?
  • 如果您运行docker ps,容器是否显示为正在运行?还有docker version 的输出是什么?如果您使用Docker for Windows,您将无法访问本地主机,Published Ports On Windows Containers Don't Do Loopback

标签: docker


【解决方案1】:

我想也许你在 Windows 的浏览器中访问http://localhost:4000,那么你应该使用 docker 默认机器 ip(通常是 192.168.99.100)。 试试http://192.168.99.100:4000

【讨论】:

  • 感谢您的建议。 192.162.99.100 也适用于使用 Linux 的 Virtual Box。但是本地主机 - 没有。
【解决方案2】:

我也遇到了这个问题,按照documentation的这一部分解决了:

注意:如果您在 Windows 7 上使用 Docker Toolbox,请使用 Docker 机器 IP 而不是 localhost。例如, http://192.168.99.100:4000/。要查找 IP 地址,请使用命令 码头机器ip。

【讨论】:

    【解决方案3】:

    如果您在 docker 容器中运行 nodejs 应用程序,请尝试使用 '0.0.0.0' 而不是 'localhost'。

    示例:假设您的应用在端口 3000 上运行

    server.listen(3000, 'localhost' () => {
    
    console.log('listening for requests on port 3000');
    
    });
    
    
    server.listen(3000, '0.0.0.0' () => {
        
    console.log('listening for requests on port 3000');
        
    });
    

    然后您可以在 docker 中将端口映射到您的 Web 应用程序。

    docker run -p 4000:3000 --name 'your_container_name' 'your_image_name'
    

    在您的 cmd 或终端上使用以下命令启动容器并查看端口。

    docker port <your_container_name>
    

    【讨论】:

      【解决方案4】:

      我在使用 docker for windows 时也遇到了这个错误。

      尽管进行了多次尝试,但仍无法通过使用端口号和映像重建或完全擦除 docker 容器来解决。

      我花了一段时间才解决,所以想为大家节省一些时间。

      1-输入命令Run docker network ls

      寻找类似于下面的输出-

         Network ID       Name   Driver    Scope
         cd6a217449e3     nat    nat       local
      

      2- 复制网络 ID

      3-输入命令docker network inspect THENETWORKID

      4- 您将收到一些类似于 json 输出的屏幕输出,查找类似于以下的文本:-

      "Containers": {
      
      "4b953b6a597e38eac1de39119d30fb4c87bca6faae7da444b02e223685eed5c7": {
      
      "Name": "jolly_rosalind",
      
      "EndpointID": "5919da54af323505e18d9807742fd12bb3acbe260dcee28911ffdf56fb905baf",
      
      "MacAddress": "00:15:5d:3c:50:58",
      
      "IPv4Address": "172.30.49.218/16",
      
      "IPv6Address": ""
      
      }
      

      5- 在您的网络浏览器中输入“http://THEIPV4ADDRESS:5000/”,您可能会看到一个漂亮的“0”。

      祝你好运!

      【讨论】:

        【解决方案5】:

        使用docker run 命令,您应该使用http://127.0.0.1:4000 从主机访问容器,正如@Black 在 cmets 上所说的那样。无论如何,你的“友好你好”形象到底是什么?因为 dockerhub 上有很多“友好的你好”图像,但你的不是其中任何一个。没有官方的友好你好形象。你能把你的Dockerfile吗?无论如何,假设标准的“friendlyhello”将在端口 80 上运行带有 Hello World 欢迎页面的 Web 服务器。它应该可以工作。

        我已经用docker run -p 4000:80 movila/friendlyhello 进行了测试并且正在为我工​​作。

        如果不适合你,听起来你有某种 iptables 问题。重新启动您的机器以恢复 iptables 规则(docker 会自动执行此操作)并重试。

        另一种可能是直接访问容器的ip而不是hosts的ip。当您启动 docker 容器时,如果您不指定 -d 参数,它将让您的终端打印其日志。在那个日志上有一个ip。该ip是容器的ip。我的日志示例:

        * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
        172.17.0.1 - - [10/May/2017 07:13:53] "GET / HTTP/1.1" 200 -
        172.17.0.1 - - [10/May/2017 07:13:53] "GET /favicon.ico HTTP/1.1" 404 -
        

        你可以尝试使用http://172.17.0.1来访问它。

        【讨论】:

        • 我在没有使用 d * Running on http://0.0.0.0:80/ (Press CTRL+C to quit) 的情况下完全尝试了您提到的内容,在此行之后,我看不到任何日志,我检查了控制器的 IP,但在浏览器中出现超时错误 http://172.17.0.2/4000 This site can’t be reached 172.17.0.2 took too long to respond. Search Google for 4000 ERR_CONNECTION_TIMED_OUT
        【解决方案6】:

        如果您能分享您正在开发的 Docker 版本和操作系统,那就太好了。同时,请尝试以下步骤:

        1. 检查您的容器是否真的在端口 80 上运行
        2. 不要使用http://localhost:4000,而是尝试 http://{CONTAINER_IP}:4000/ 您应该通过以下方式获取容器 IP

        docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

        1. 可能您的应用程序使用 HTTPS。也可以试试

        【讨论】:

        【解决方案7】:

        我在 MacOS 上通过安装和启动 docker-machine 解决了这种情况 这是因为在 MacOS 上运行 docker 需要虚拟机。

        另一种方法是使用Docker Desktop

        【讨论】:

          猜你喜欢
          • 2022-11-30
          • 1970-01-01
          • 2012-03-22
          • 2020-09-04
          • 1970-01-01
          • 2014-11-06
          • 2013-01-16
          • 2016-01-01
          相关资源
          最近更新 更多