连接到Docker中的Tornado应用程序

时间:2015-06-26 13:17:38

标签: python docker tornado

Dockerfile 中,我使用:

EXPOSE 8888

所以,我运行容器:

docker run --name some-app --link some-redis:redis -d app

在输出中我有这个字符串:

c980349b5b2120064fc197b00a1aaf94aa16c788b66cb148da7826bb5488d0db

然后我想知道ip,我可以从浏览器连接:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' c980349b
5b2120064fc197b00a1aaf94aa16c788b66cb148da7826bb5488d0db

返回 172.17.0.20

我转到网络浏览器并在页面http://172.17.0.20:8888上,但我在Chrome中

ERR_CONNECTION_TIMED_OUT

问题是什么以及如何解决这个问题?

谢谢!

更新

Dockerfile:

FROM python:3.4.3-slim
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY app.py /usr/src/app/
COPY requirements.txt /usr/src/app/
RUN pip install -r requirements.txt
CMD [ "python", "./app.py" ]
EXPOSE 8888

当我使用时:

docker exec -it some-app bash
netstat -tulnp | grep 8888

它返回了:

bash: netstat: command not found

docker logs some-app

什么都不返回

1 个答案:

答案 0 :(得分:2)

我会检查两次图像,因为似乎容器没有任何进程侦听端口8888.要调试问题,您可以在容器内运行shell会话并检查进程是否正在侦听,检查容器日志或者如果有任何日志你可以检查内部的任何文件,... IE:

   $ sudo docker logs some-app (check container log)
   $ sudo docker exec -it some-app bash  (run an interactive shell)
   # netstat -tulnp | grep 8888   (check if any process is listening)

如果你没有看到问题,我会要求你发布你的应用程序Dockerfile和  除此之外,如果您使用容器ip访问您的服务,则不需要在Dockerfile中使用EXPOSE 8888EXPOSE用于在使用-P选项运行容器时将这些端口发布到主机的随机端口。