Docker教程,无法访问localhost:4000

时间:2019-08-29 00:37:14

标签: docker

遵循https://docs.docker.com/get-started/part2/上的教程。

我用docker run -p 4000:80 friendlyhello启动我的Docker容器

然后看

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:8088/ (Press CTRL+C to quit)

但是无法从localhost:4000的预期路径访问它。

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

好的,所以也许它不在我的本地主机上。获取容器ID,我使用 docker inspect --format '{{ .NetworkSettings.IPAddress }}' 7e5bace5f69c

,它返回172.17.0.2,但是没有运气! curl继续给出相同的响应。我可以确认4000上正在运行某些东西。...

 lsof -i :4000
COMMAND     PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.docke 94812 travis   18u  IPv6 0x7516cbae76f408b5      0t0  TCP *:terabase (LISTEN)

我正在为此扯头发。我已经阅读了故障排除指南,可以确认  *不在代理上  *不要使用自定义DNS  *我在连接docker时遇到问题,而不是在docker连接到我的pip服务器时出现问题。

使用python app.py运行app.py,服务器启动,我可以命中它。我想念什么?

2 个答案:

答案 0 :(得分:1)

尝试使用以下命令运行它:

docker run -p 4000:8088 friendlyhello

从日志中可以看到,您的应用在端口8088上启动,但是您将4000连接到80上的80上,实际上并没有监听。 / p>

答案 1 :(得分:1)

您是否不小心将port = 8088放在了app.py文件的底部?运行此命令时,输出的最后一行表示python应用程序暴露在端口8088而不是80上。

要确认您可以运行,请修改app.py文件并重建映像,或者可以运行:docker run -p 4000:8088 friendlyhello,它将本地端口4000映射到容器中的8088。