数据仅用于弹性搜索的容器

时间:2014-12-09 23:50:36

标签: elasticsearch docker

我在使用弹性搜索只获取数据容器时遇到问题。 我可以让它在volume是主机卷但不适用于仅数据容器的情况下工作。 这是我的仅数据容器:

# Dockerfile
FROM busybox
VOLUME /src/elasticsearch/data
VOLUME /src/elasticsearch/log
VOLUME /src/elasticsearch/plugins
VOLUME /src/elasticsearch/config

ADD ./elasticsearch.yml /src/elasticsearch/config/elasticsearch.yml
CMD /bin/sh

构建并运行它:

docker build -t nmcg/my_data .
docker run -i -t -name my_data nmcg/my_data

然后我构建了包含elasticsearch

的grafana dockerfile
docker build -t nmcg/grafana:5.0 .
docker run -d -p 80:80 -p 8000:8000 -p 9200:9200 -p 8125:8125/udp -p 8126:8126 --volumes-from metrics_data1 nmcg/grafana:5.0

并在运行elasticsearch时指向elasticsearch.yml文件:

exec start-stop-daemon --start --user "elasticsearch" -c "elasticsearch" --exec /elasticsearch/bin/elasticsearch --"-Des.default.config=/src/elasticsearch/config/e.yml

然而,弹性搜索无法启动:

2014-12-09 23:32:59,668 INFO success: elasticsearch entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-12-09 23:32:59,927 INFO exited: elasticsearch (exit status 3; not expected)

有什么想法吗?不明白为什么不会开始,因为当我托管具有相同路径的卷时,它可以工作

2 个答案:

答案 0 :(得分:0)

我在运行exec start-stop-daemon --st...

的时候并不清楚

但你应该尝试做:

docker run -d \
    -p 80:80 -p 8000:8000 -p 9200:9200 -p 8125:8125/udp -p 8126:8126 \
    --volumes-from metrics_data1 nmcg/grafana:5.0 \
    /elasticsearch/bin/elasticsearch -Des.default.config=/src/elasticsearch/config/e.yml

这似乎更像是常规的“码头”方法。

答案 1 :(得分:0)

Dockerfile中的ADD行不会产生任何影响(文件不会被复制),因为它出现在VOLUME指令之后。如果您改为在 VOLUME指令之前将其更改为,则会将其复制到卷中。

您无需让数据容器保持运行状态。如果你只是运行退出的命令,例如docker run --name data-con data-container-image echo "Data Container"它将创建卷并退出。卷仍然存在,可以使用--volumes-from data-con在其他容器中访问。只是不要使用数据容器。

此外,通常您不需要单独的Dockerfile来运行容器和数据容器 - 您也可以使用grafana映像作为数据容器。

简而言之:

  • 将ADD线移至顶部
  • 删除CMD行
  • 使用docker run --name my_data nmcg/my_data echo "My Data Container
  • 启动数据容器
  • 检查您的数据容器是否确实需要单独的Dockerfile

有关详情,请点击此处查看我的博文:http://container-solutions.com/2014/12/understanding-volumes-docker/