连接拒绝Docker运行

时间:2017-05-26 18:56:13

标签: python docker logstash dockerfile

我在构建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?这是不正确的?感谢。

1 个答案:

答案 0 :(得分:2)

关于EXPOSE

您运行的每个容器都有自己的网络接口。执行EXPOSE 5000告诉docker将端口5000 container-network-interface链接到主机中的随机端口(请参阅docker ps),只要告诉您当docker run -P时,泊坞人可以使用此功能。

关于logstash。

如果您的logstash安装在您的主机或其他容器中,则表示logstash不在" localhost"容器(请记住,每个容器都有自己的网络接口,每个容器都有自己的localhost)。所以你需要正确指向logstash。

如何?

方法1:

不要为容器提供自己的接口,因此它与您的机器具有相同的localhost

docker run --net=host ...

方法2:

如果您使用的是docker-compose,请使用docker network links。即:

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

所以指出:logstash:5000(泊坞窗将该名称解析为与logstash对应的内部IP)

方法3:

如果logstash在您的localhost:5000(来自您的主机)收听,您可以从容器内部指向它:172.17.0.1:5000 172.17.0.1host固定IP,但这个选项不太优雅,可以说是