elasticsearch - 无法访问端口5601上的Docker容器中运行的Kibana

标签 elasticsearch docker dockerfile kibana-4

我已经使用以下Docker文件构建了一个Docker镜像。

# gunicorn-flask                                                                                                                                                                         

FROM devdb/kibana

MAINTAINER John Doe <user.name@gmail.com>

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt-get install -y python python-pip python-virtualenv gunicorn

# Setup flask application
RUN mkdir -p /deploy/app

COPY gunicorn_config.py /deploy/gunicorn_config.py
COPY app /deploy/app

RUN pip install -r /deploy/app/requirements.txt

WORKDIR /deploy/app

EXPOSE 5000 5601 9200

# Start gunicorn
CMD ["/usr/bin/gunicorn", "--config", "/deploy/gunicorn_config.py", "listener:app"]

我正在从该Docker文件创建的镜像中运行容器,如下所示。
sudo docker run -p 5601:5601 -p 9200:9200 -p 5000:5000 -v /home/Workspace/xits/config/elasticsearch.yml:/opt/elasticsearch/config/elasticsearch.yml -v /home/Workspace/xits/config/kibana.yml:/opt/kibana/config/kibana.yml es-kibana-gunicorn:latest

我面临的问题是我无法访问主机上的Kibana端口5601。我的浏览器页面显示ERR_CONNECTION_REFUSED
我可以访问端口5000。

我不知道为什么会这样,任何帮助将不胜感激。

最佳答案

当Docker容器启动时,父Dockerfile devdb/kibana使用脚本来启动kibana和elasticsearch。请参见 CMD ["/sbin/my_init"] the script本身。

在自己的Dockerfile中使用 CMD 指令时,将从父Dockerfile中覆盖该指令。
由于您的CMD仅启动gunicorn,因此不会启动elasticsearch和kibana。这就是为什么它们各自的网络端口上没有响应。

您从其继承的Docker镜像继承自phusion/baseimage,后者具有自己的使多个进程在Docker容器中运行的方式。我建议您按照他们的README文件上的instructions来学习如何将您的gunicorn添加到要启动的服务列表中。基本上,您必须定义一个名为run的脚本,并将其添加到/etc/service/<service name>/目录中的docker镜像中。

在您的Dockerfile中,添加:

COPY run /etc/service/gunicorn/

并且run脚本应类似于:
#!/bin/bash
cd /deploy/app
/usr/bin/gunicorn --config /deploy/gunicorn_config.py listener:app

关于elasticsearch - 无法访问端口5601上的Docker容器中运行的Kibana,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30991122/

相关文章:

elasticsearch - Elasticsearch查询:对两个字段进行范围查询,但一个是可选字段

elasticsearch - 查询字符串查询-两个字段必须匹配

Dockerfile 命名 : . dockerfile 与 Dockerfile

elasticsearch - 什么是ELasticsearch Ingestion API中的logstash “mutate”等价物

json - 如何将 map 转换为类型为AnyRef的json

postgresql - 运行 Chainlink 节点 - 远程 DATABASE_URL 配置 PostgreSQL 问题

linux - stdout-stderr如何与Docker容器一起使用?

Docker 容器 RestartCount 不增加

mongodb - Docker 磁盘空间用完

python - 我可以将目录从 docker 区域之外的某个位置复制到我的 dockerfile 中吗?