【问题标题】:How to run Python server on Docker's container如何在 Docker 容器上运行 Python 服务器
【发布时间】:2017-04-05 13:19:55
【问题描述】:

我想在 docker 容器上运行 Python HTTP 服务器。

我的DockerFile 看起来像这样:

FROM continuumio/anaconda3:latest

RUN apt-get -y update
RUN apt-get -y install linux-headers-amd64 build-essential libc-dev gcc

RUN conda install --yes gcc
RUN conda install --yes numpy
RUN conda install --yes scipy
RUN conda install --yes gensim
RUN pip install annoy

RUN conda config --add channels conda-forge
RUN conda install --yes spacy

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

ADD my-app.tar /usr/src/app

WORKDIR /usr/src/app/source

我使用以下方法构建图像:

docker build -t my-app-poc .

启动容器并输入命令:

docker run -i -t -p 9998:9998

在 Docker 映像的 bash 中,我运行脚本:

python Service.py

正确启动:

Wed Apr  5 13:09:51 2017 Server Starts - :9998

但是当我在主机上输入地址时:

http://localhost:9998

什么都没有发生。我也试过将EXPOSE 9998 放在DockerFile 的末尾,但没有帮助。

如果我在主机上输入docker-machine 地址:

http://192.168.99.100:9989/

它有效。但我想在常规服务器上运行该映像,而不是在我的本地计算机上运行 - 所以所有内容都应该暴露给 localhost。

我在 Windows 7 上试过。

你知道如何运行它吗?

我会很高兴得到您的帮助!

【问题讨论】:

标签: python bash docker simplehttpserver


【解决方案1】:

这可能相关也可能不相关,但我无法添加评论,因此您会收到独立回复!

在 Docker 容器中,您可能必须将应用程序绑定到 0.0.0.0 主机。 See this link.

在我看来(尽管我必须更多地了解该应用程序才能确定)您正在寻找环回接口上的连接。这仅将侦听器暴露给本地机器。相比之下,0.0.0.0 用于将侦听器公开给机器上的所有网络接口。特别是在这种情况下,docker 网络适配器。更详细的解释,see this post.

【讨论】:

    【解决方案2】:

    您所描述的是正常行为。 Docker 镜像在虚拟化环境中运行,因此无法共享环回地址。您需要做的是将流量从您的服务器重定向到您的 docker 映像。

    This documentation page 应该有你需要的所有答案。

    祝你好运!

    【讨论】:

      【解决方案3】:

      来自https://docs.docker.com/engine/reference/run/#expose-incoming-ports

      -p Expose 选项也可以使用 IP 地址。如果您还想绑定到 127.0.0.1,它就到那里。

      尝试类似:-p 127.0.0.1:9998:9998

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-01
        • 2021-08-04
        • 2018-09-02
        • 2020-06-18
        • 1970-01-01
        • 1970-01-01
        • 2017-03-04
        • 1970-01-01
        相关资源
        最近更新 更多