Docker – 无法连接到本地端口4000:连接被拒绝

嗨,我对Docker很新,我想通过官方网站上的教程来熟悉Docker。 现在我遇到了教程的第2部分(在这里你可以查看链接=> https://docs.docker.com/get-started/part2/#run-the-app )

我有示例应用程序代码,Dockerfile和requirements.txt完全相同的官方教程

$ ls app.py Dockerfile requriements.txt 

我的Dockerfile看起来像这样

 FROM python:2.7-slim WORKDIR /app ADD . /app RUN pip install -r requriements.txt EXPOSE 80 ENV NAME World CMD ["python", "app.py"] 

所有3个文件都具有与教程完全相同的文件内容/代码。 我能够用这个命令build立图像registry

 $ docker build -t friendlyhello . 

一切看起来不错。 现在我有示例项目图像registry。

 $ docker images REPOSITORY TAG IMAGE ID CREATED friendlyhello latest 82b8a0b52e91 39 minutes ago python 2.7-slim 1c7128a655f6 5 days ago hello-world latest 48b5124b2768 4 months ago 

然后我用这个命令根据官方教程运行应用程序

 $ docker run -d -p 4000:80 friendlyhello c1893f7eea9f1b708f639653b8eba20733d8a45d3812b442bc295b43c6c7dd5c 

编辑 :这是我的容器后运行上面的命令

 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS c1893f7eea9f friendlyhello "python app.py" 15 minutes ago Up 16 minutes 

官方教程指导读者查看http://localhost:4000因为他们已经将机器端口4000映射到容器端口80

不幸的是,我无法从该url得到任何回应。

 $ curl http://localhost:4000 curl: (7) Failed to connect to localhost port 4000: Connection refused 

我是完全新手,我不知道该怎么做….我怎样才能得到它的工作? 预先感谢任何回应。

编辑 :我做了@ johnharris85build议。 以下是输出

 $ curl http://$(echo docker-machine ip default):4000 curl: (6) Couldn't resolve host 'docker-machine' curl: (6) Couldn't resolve host 'ip' curl: (6) Couldn't resolve host 'default' 

它似乎也不起作用。

编辑 :@ johnharris85纠正了他的build议,@ user8023051澄清这个命令是如何来的,发生了什么。 它正在工作:)谢谢

 $ curl http://$(docker-machine ip default):4000 <h3>Hello World!</h3><b>Hostname:</b> c1893f7eea9f<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i> 

我不是很熟悉docker,但是听起来像你的设置是这样的,你的docker实例运行在一个虚拟机上,并且你试图从你的Windows机器上访问绑定到localhost(vm)的应用程序。 你从curl那里得到拒绝的原因是因为在主机上没有任何实际的监听端口4000(Windows)。

尝试find您的docker实例正在使用的IP:

$ docker-machine ip default

现在你知道IP地址了,再试一次。 你甚至可以在命令中进行评估,如下所示:

$ curl http://$(docker-machine ip default):4000