连接拒绝docker运行

build立我的Docker镜像并运行docker run -t imageName后,我得到一个连接被拒绝

在容器内部,我的python脚本正在做Web请求(外部API调用),然后通过localhost:5000与logstash套接字进行通信。

我的dockerfile非常简单:

 FROM ubuntu:14.04 RUN apt-get update -y RUN apt-get install -y nginx git python-setuptools python-dev RUN easy_install pip #Install app dependencies RUN pip install requests configparser EXPOSE 80 EXPOSE 5000 #Add project directory ADD . /usr/local/scripts/ #Set default working directory WORKDIR /usr/local/scripts CMD ["python", "logs.py"] 

但是,当我尝试运行此操作时,出现[ERROR] Connection refused消息。 对我来说,我在这里做错了什么不是很明显 – 我相信我会向外界开放80和5000? 这是不正确的? 谢谢。

关于EXPOSE

您运行的每个容器都有自己的networking接口。 通过EXPOSE 5000告诉EXPOSE 5000将端口5000 容器networking接口链接到主机中的一个随机端口(只要您使用docker ps查看),只要您告诉docker在docker run使用-P

关于logstash。

如果你的logstash被安装在你的主机或另一个容器中,这意味着logstash不在容器的“localhost”中(记住每个容器都有自己的networking接口,每个容器都有自己的localhost )。 所以你需要正确的指向logstash。

怎么样?

方法1:

不要给容器自己的iterface,所以它有和你的机器一样的localhost

 docker run --net=host ... 

方法2:

如果您使用的是docker-compose,请使用dockernetworking链接。 即:

 services: py_app: ... links: - logstash logstash: image: .../logstash.. 

所以指向这个: logstash:5000logstash:5000会把这个名字parsing成对应于logstash的内部IP)


方法3:

如果logstash监听localhost:5000 (从你的主机),你可以从你的容器内部指向它: 172.17.0.1:5000 localhost:5000172.17.0.1host固定IP,但是这个选项不那么优雅,可以说是)