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

我想在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 

我用以下方式构build图像:

 docker build -t my-app-poc . 

启动容器并input命令:

 docker run -i -t -p 9998:9998 

在Docker镜像的bash中运行脚本:

 python Service.py 

哪个开始正确:

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

但是当我在我的主机上input地址时:

 http://localhost:9998 

什么都没发生。 我已经尝试将EXPOSE 9998放在我的DockerFile的末尾,但是没有帮助。

如果我在主机上inputdocker-machine地址:

 http://192.168.99.100:9989/ 

有用。 但是我想在普通的服务器上运行这个映像,而不是在本地机器上 – 所以所有的东西都应该暴露给本地主机。

我在Windows 7上试了一下。

你有什么想法如何运行?

我会很高兴你的帮助!

这可能是也可能不是相关的,但我不能添加评论,所以你得到一个独立的答复!

在Docker容器中,您可能必须将应用程序绑定到0.0.0.0主机。 看到这个链接。

在我看来(虽然我将不得不更多地了解应用程序是肯定的),你正在寻找环路接口上的连接。 这只会将侦听器暴露给本地机器。 相比之下, 0.0.0.0用于将侦听器暴露给机器上的所有networking接口。 特别是在这种情况下,泊坞窗networking适配器。 有关更详细的解释, 请参阅这篇文章。

你所描述的是一种正常的行为。 Docker映像在虚拟环境中运行,因此无法共享环回地址。 你需要做的是将你的服务器的stream量redirect到你的泊坞窗图像。

这个文档页面应该有你需要的所有答案。

祝你好运!

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

-p暴露选项也可以采取一个ip地址。 如果你想要绑定到127.0.0.1,那么就去那里。

尝试像这样-p 127.0.0.1:9998:9998