Docker 问题,入口点 file.sh 无法识别 su-exec 命令

兰多·施蒂希

我正在尝试构建一个运行弹性搜索的 docker 镜像,并从该镜像创建一个容器。

以下是我的 Dockerfile 的内容:

FROM adoptopenjdk/openjdk8:alpine

MAINTAINER rando

COPY  elasticsearch-2.1.1.tar.gz /tmp

RUN    cd /tmp  \
    && tar -xzf  elasticsearch-2.1.1.tar.gz  \ 
    && ls    \
    && mv elasticsearch-2.1.1   /usr/share/elasticsearch   \
    && ls /usr/share \
       && adduser -DH -s /sbin/nologin elasticsearch \
       && chown -R elasticsearch:elasticsearch /usr/share/elasticsearch \
       && echo "Creating Elasticsearch Paths..." \
       && for path in /usr/share/elasticsearch/data /usr/share/elasticsearch/logs /usr/share/elasticsearch/config /usr/share/elasticsearch/config/scripts /usr/share/elasticsearch/plugins ; do mkdir -p "$path"; done \
       && chown -R elasticsearch:elasticsearch /usr/share/elasticsearch \
       && ls /usr/share/elasticsearch 

COPY elasticsearch.yml  /usr/share/elasticsearch/config
COPY elastic-entrypoint.sh /
RUN chmod +x /elastic-entrypoint.sh 

ENV  ES_HOME=/usr/share/elasticsearch   
ENV  PATH=${ES_HOME}/bin:${PATH}

RUN echo "$PATH"

VOLUME ["/usr/share/elasticsearch/data"]

EXPOSE 9200 9300

ENTRYPOINT ["/elastic-entrypoint.sh"]

CMD ["elasticsearch"]

我将在运行以下命令时从 docker 文件成功构建映像:

docker build -t elasticsearch .

当我尝试使用以下命令创建容器时,我遇到了一些问题:

docker run -d --network host elasticsearch

容器已创建但直接终止。

以下是运行容器的 docker 日志时的内容:

/elastic-entrypoint.sh: exec: line 20: su-exec: not found

下面是 elastic-entrypoint.sh 文件的内容:

#!/bin/sh

set -e

# Add elasticsearch as command if needed
if [ "${1:0:1}" = '-' ]; then
    set -- elasticsearch "$@"
fi

# Drop root privileges if we are running elasticsearch
# allow the container to be started with `--user`
if [ "$1" = 'elasticsearch' -a "$(id -u)" = '0' ]; then
    # Change the ownership of /usr/share/elasticsearch/data to elasticsearch
    chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data

    set -- su-exec elasticsearch tini -- "$@"
fi


exec "$@"

这似乎set -- su-exec elasticsearch tini -- "$@"不起作用。

我将不胜感激任何解决此问题的帮助或指导。

问候,兰多。

更新 ..................................... …………

我修改了文件如下:

    #set -- su-exec elasticsearch tini -- "$@"
    set -- su -c elasticsearch tini -- "$@"

它显示了错误:

su: unknown user tini

它无法识别用户。

更新 2................................................ ……………………

我通过添加su-exe如下安装命令来修改 dockerfile

# Install required packages
RUN apk add --no-cache bash su-exec

容器退出并出现以下错误:

su-exec: tini: No such file or directory
兰多·施蒂希

错误的原因是adoptopenjdk/openjdk8:alpine不包括 su-exec 包。我修改了 dockerfile 如下:

FROM adoptopenjdk/openjdk8:alpine

MAINTAINER rando

# Install required packages
RUN apk add --no-cache bash su-exec
RUN apk add --update tini

COPY  elasticsearch-2.1.1.tar.gz /tmp

...

su-exec在我的情况下,添加包解决了这个问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章