在 Docker 中连接到 Tornado 应用程序

Connect to Tornado app in Docker

Dockerfile中我使用:

EXPOSE 8888

所以,我运行容器:

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

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

c980349b5b2120064fc197b00a1aaf94aa16c788b66cb148da7826bb5488d0db

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

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

它returns 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

Returns没什么

我会检查两次图像,因为容器似乎没有任何进程在端口 8888 上侦听。要调试该问题,您可以 运行 容器内的 shell 会话并检查如果进程正在侦听,请检查容器日志或其中的任何文件,如果有任何日志可以检查,... I.E.:

   $ 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)

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