【问题标题】:Connect to Tornado app in Docker在 Docker 中连接到 Tornado 应用程序
【发布时间】:2015-06-26 13:17:37
【问题描述】:

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

我去 web-brouser 和页面 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

什么都不返回

【问题讨论】:

    标签: python docker tornado


    【解决方案1】:

    我会检查两次图像,因为容器似乎没有任何进程在端口 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)
    

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

    【讨论】:

    • 你需要对你的容器进行一些调试:直接运行python app.py,安装netstat并检查进程是否在监听......
    • 我使用docker run --name some-app -p 8888:8888 --link some-redis:redis -d app,它可以工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2020-04-18
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多