【问题标题】:adding environment variables to elasticsearch dockerfile将环境变量添加到 elasticsearch dockerfile
【发布时间】:2019-12-17 03:34:40
【问题描述】:

我有一个工作 dockerfile 来设置 elasticsearch 如下:

FROM elasticsearch:6.5.4
WORKDIR /app
ADD . /app
ADD analysis /usr/share/elasticsearch/config/analysis
COPY test.sh .
EXPOSE 9200
EXPOSE 9300

我当前的文件目录如下:

C:.
|   Dockerfile
|   test.sh
|
+---analysis
|       wn_s.pl
|
\---poppler
    +---bin
    |       AUTHORS
    |       BINARIES
    |       COPYING
    |       COPYING3
    |       freetype6.dll
    |       jpeg62.dll

我想将 poppler 中的 bin 文件夹作为环境变量 PATH 用于 elasticsearch。为此,我在 dockerfile 中附加了

FROM elasticsearch:6.5.4
WORKDIR /app
ADD . /app
ADD analysis /usr/share/elasticsearch/config/analysis
COPY test.sh .
EXPOSE 9200
EXPOSE 9300
ENV PATH=/app/es/poppler/bin

因此,创建了映像,但是当使用该映像创建容器时,它在启动时退出,并在 docker 日志中出现以下错误:

/usr/local/bin/docker-entrypoint.sh: line 62: env: command not found
/usr/local/bin/docker-entrypoint.sh: line 93: id: command not found
/usr/local/bin/docker-entrypoint.sh: line 8: id: command not found
/usr/share/elasticsearch/bin/elasticsearch: line 17: dirname: command not found
/usr/share/elasticsearch/bin/elasticsearch: line 17: /elasticsearch-env: No such file or directory
/usr/share/elasticsearch/bin/elasticsearch: line 20: : command not found
/usr/share/elasticsearch/bin/elasticsearch: line 25: grep: command not found
/usr/share/elasticsearch/bin/elasticsearch: line 27: exec: : not found

我已经成功地在以前的项目中以类似的方式添加环境变量,但是,尽管在 stackoverflow 上进行了搜索,但我仍然无法找出问题所在。

【问题讨论】:

  • grep: command not found grep 也是来自环境变量?
  • 这是因为您将 PATH 环境变量替换为您的值,而不是将其添加到 PATH 变量中。

标签: docker elasticsearch dockerfile


【解决方案1】:

您只是覆盖了默认 PATH,因此容器找不到任何可执行文件,这就是您看到这些错误的原因。

修复: ENV PATH="/app/es/poppler/bin:${PATH}"

这将允许您保留现有的 PATH 并添加您的自定义。

【讨论】:

  • 这在 dockerfile 中效果很好,但是当使用与 docker-compose 相同的 dockerfile 时,它​​会抛出一个错误,指出 Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"python\": executable file not found in $PATH": unknown
【解决方案2】:

正如评论中所建议的,您替换了 PATH 环境变量的值,而不是向其中添加您的值。

替换,

ENV PATH=/app/es/poppler/bin

ENV PATH='${PATH}:/app/es/poppler/bin'

【讨论】:

  • @jakub Bujny 提供的解决方案有效,这是否意味着您说的版本是错误的。如果不是,请您解释一下两者之间的区别。谢谢
  • @IrfanHarun:建议的两种解决方案基本相同,只是略有不同。我把 PATH 的默认值放在前面,然后在后面加上/app/es/poppler/bin。假设默认 PATH 变量中存在一个名为 grep 的实用程序,并且在新添加的路径 '/app/es/poppler/bin. With such a case, for my answer, the system's grep` 中还有一个名为 'grep' 的可执行二进制文件将被执行,对于 Jakub 的回答,新添加的路径中的grep会被执行,当grep命令被触发时没有提及绝对路径。
猜你喜欢
  • 1970-01-01
  • 2023-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 2022-11-16
  • 2018-04-27
相关资源
最近更新 更多