如何在Docker的容器上运行Python服务器

时间:2017-04-05 13:19:55

标签: python bash docker simplehttpserver

我想在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上尝试过。

你知道怎么运行吗?

我将非常高兴你的帮助!

3 个答案:

答案 0 :(得分:2)

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

在我看来(虽然我必须知道更多关于应用程序的确定),你正在寻找环回接口上的连接。这会将侦听器仅暴露给本地计算机。相比之下,0.0.0.0用于将侦听器暴露给计算机上的所有网络接口。特别是在这种情况下,docker网络适配器。有关更详细的说明,请see this post.

答案 1 :(得分:0)

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

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

祝你好运!

答案 2 :(得分:0)

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

-p expose选项也可以使用ip地址。如果你想要绑定到127.0.0.1,那就去那里。

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