2017-09-25 41 views
0

我想从一个容器运行my_service到另一个运行ELK堆栈与syslog驱动程序(所以我需要安装logstash-input-syslog插件)发送日志。系统日志驱动不与码头工作组合和麋鹿堆栈

我调整this elk image(和标记它作为elk-custom)通过以下Dockerfile-elk

(使用端口514因为this seems to be the default port

FROM sebp/elk 

WORKDIR /opt/logstash/bin 

RUN ./logstash-plugin install logstash-input-syslog 

EXPOSE 514 

通过docker-compose运行我的服务如下或多或少:

elk-custom: 
    # image: elk-custom 
    build: 
     context: . 
     dockerfile: Dockerfile-elk 
    ports: 
     - 5601:5601 
     - 9200:9200 
     - 5044:5044 
     - 514:514 

    my_service: 
    image: some_image_from_my_local_registry 
    depends_on: 
     - elk-custom 
    logging: 
    driver: syslog 
    options: 
     syslog-address: "tcp://elk-custom:514" 

但是:

ERROR: for b4cd17dc1142_namespace_my_service_1 Cannot start service my_service: failed to initialize logging driver: dial tcp: lookup elk-custom on 10.14.1.31:53: server misbehaving

ERROR: for api Cannot start service my_service: failed to initialize logging driver: dial tcp: lookup elk-custom on 10.14.1.31:53: server misbehaving ERROR: Encountered errors while bringing up the project.

有什么建议吗?

UPDATE:显然,似乎没有任何从容器内的监听端口514,事业,命令netstat -a显示此端口上没有什么....不知道为什么......

+1

尝试更改'tcp:// elk-custom:514'到'tcp://127.0.0.1:514',看看是否有帮助 –

+0

是的。这似乎做的工作...我的服务堆现在似乎开始...进一步的logstash配置 – pkaramol

回答

1

您需要使用tcp://127.0.0.1:514而不是tcp://elk-custom:514。原因是此地址正在被docker使用,而不是由容器使用。这就是为什么elk-custom无法访问。

所以这只会在你映射端口(你已经完成)和elk-service首先启动(你已经完成)并且可以从码头主机访问IP时使用,你可以使用tcp://127.0.0.1:514

+0

因此,实际的日志转发将由docker守护进程完成,他是**不知道主机名,而'docker-compose' **中定义的每个容器/服务都**知道对方的主机名?是这样吗? – pkaramol

+0

是的,这是正确的。 –

+0

任何建议如何在'rancher'上运行? “127.0.0.1”或“elk-custom”(即服务名称)都不起作用,因为它们导致相同的问题:'拨号tcp:在10.14.1.31:53上查找elk-custom:服务器行为异常' – pkaramol