嗨,我是Docker的新手,我正在尝试通过官方网站上的教程熟悉Docker.现在我被困在教程的第2部分(你可以在这里查看链接=> https://docs.docker.com/get-started/part2/#run-the-app)
我有示例应用程序代码,Dockerfile和requirements.txt与官方教程完全相同
$ ls
app.py Dockerfile requriements.txt
Run Code Online (Sandbox Code Playgroud)
我的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"]
Run Code Online (Sandbox Code Playgroud)
所有3个文件的文件内容/代码与教程完全相同.我能够使用此命令构建映像注册表
$ docker build -t friendlyhello .
Run Code Online (Sandbox Code Playgroud)
一切看起来都很棒.现在我有示例项目图像注册表.
$ 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
Run Code Online (Sandbox Code Playgroud)
然后,我根据官方教程使用此命令运行应用程序
$ docker run -d -p 4000:80 friendlyhello
c1893f7eea9f1b708f639653b8eba20733d8a45d3812b442bc295b43c6c7dd5c
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的容器运行命令之后
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
c1893f7eea9f friendlyhello "python app.py" 15 minutes ago Up 16 minutes
Run Code Online (Sandbox Code Playgroud)
官方教程指导读者查看,http://localhost:4000因为他们已经将机器端口映射4000到容器端口80
不幸的是,我无法从该URL获得任何回复.
$ curl http://localhost:4000
curl: (7) Failed to connect to localhost port 4000: Connection refused
Run Code Online (Sandbox Code Playgroud)
我完全是新手,我不知道该怎么做......我怎么能让它起作用?提前感谢您的回复.
编辑:我做了@ 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'
Run Code Online (Sandbox Code Playgroud)
它似乎也无效.
编辑:@ 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>
Run Code Online (Sandbox Code Playgroud)
小智 52
我对docker不太熟悉,但听起来你的设置是你的docker实例在虚拟机中运行,而你正试图从你的Windows机器上访问绑定到localhost(vm)的应用程序.你在这里拒绝curl的原因是因为没有任何东西实际上正在侦听主机上的端口4000(Windows).
尝试通过以下方式查找docker实例正在使用的IP:
$ docker-machine ip default
既然您知道了IP地址,请再次尝试卷曲.您甚至可以在命令中对其进行评估,如下所示:
$ curl http://$(docker-machine ip default):4000
如果您在Mac上运行docker并尝试使用localhost连接到您的依赖关系(postgres等),请使用docker.for.mac.localhost替换localhost
| 归档时间: |
|
| 查看次数: |
28969 次 |
| 最近记录: |