在$ PATH"

时间:2017-12-08 21:43:41

标签: docker elasticsearch dockerfile ubuntu-16.04

我正在尝试为elasticsearch 1.7运行一个docker容器。下面是我的Dockerfile:

FROM ubuntu:16.04

RUN apt-get update \
    && apt-get install -y curl zip unzip vim software-properties-common \
    && echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections \
    && add-apt-repository -y ppa:webupd8team/java \
    && apt-get update \
    && apt-get install -y oracle-java8-installer \
    && wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add - \
    && echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" |  tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list \
    && apt-get update \
    && apt-get install -y elasticsearch \
    && echo "network.host: localhost" >> /etc/elasticsearch/elasticsearch.yml


EXPOSE 9200

CMD ["elasticsearch"]

Docker构建工作正常。但是 docker run 命令给了我这个错误:来自守护进程的错误响应:oci运行时错误:container_linux.go:265:启动容器进程导致" exec:\&#34 ; elasticsearch \":$ PATH"

中找不到可执行文件

我正在使用Mac和Docker版本是:17.09.0-ce

1 个答案:

答案 0 :(得分:1)

这已经有几天了 - 你解决了吗?错误信息确切地说明问题是什么(虽然我不确定为什么这是一个问题)。

我基于此做了一个docker构建。这是$PATH

root@96f969e3ab3d:/# echo $PATH
> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

这是弹性搜索安装的地方(显然):

root@96f969e3ab3d:/# find / -name 'elasticsearch' -type f
> /etc/default/elasticsearch
> /etc/init.d/elasticsearch
> /usr/share/lintian/overrides/elasticsearch
> /usr/share/elasticsearch/bin/elasticsearch

基于此,看起来弹性搜索安装在/usr/share/elasticsearch/bin/elasticsearch。我认为最简单的解决方案是将CMD设置为完整路径:

CMD ["/usr/share/elasticsearch/bin/elasticsearch"]

话虽这么说,elasticsearch还有很多其他需要的数据 - 只是运行该命令似乎不起作用。基于how complex their dockerfile是基于我在/etc/init.d/elasticsearch中看到的内容(如果安装在服务器而不是容器内,弹性搜索将如何运行),我将推荐使用他们的官方容器而不是试图建立自己的容器。