你好,我对Docker非常陌生,现在正在按照官网的教程来熟悉Docker。但我卡在了教程的第二部分(你可以通过此链接查看: => https://docs.docker.com/get-started/part2/#run-the-app)。
我有一个样例应用程序代码、Docker文件和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个文件的内容/代码与教程完全相同。我能够使用此命令构建镜像注册表。
$ docker build -t friendlyhello .
一切看起来都很不错。现在我有了样例项目镜像注册表。
$ 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
我完全是个新手,不知道该怎么办......该怎么让它运作起来呢?非常感谢任何回复。
编辑:我按照 @johnharris85 建议的做了。以下是输出结果。
$ 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更正了他的建议,@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>
curl ...
命令之前,提供一下docker ps -a
命令的输出结果好吗? - johnharris85curl http://$(echo docker-machine ip default):4000
命令? - johnharris85echo
命令,直接使用docker-machine ip default
命令。 - johnharris85