【问题标题】:Docker - Override or remove ENTRYPOINT from a base imageDocker - 从基础映像中覆盖或删除 ENTRYPOINT
【发布时间】:2017-05-03 14:46:10
【问题描述】:

我正在使用 Docker(版本 1.12.2,构建 bb80604)通过 Gatling(负载测试工具)+ NodeJS 设置一个简单的图像/容器。所以,我拉了this Docker/Gatling base image 并创建了我自己的 Dockerfile 来在上面安装 NodeJS。

然而,上面的 Docker/Gatling 基础镜像已经定义了一个 ENTRYPOINT 来直接调用 Gatling,然后自动退出容器。它看起来像这样:

ENTRYPOINT ["gatling.sh"]

我想要实现的是:我想运行第二个命令(我自己的 NodeJS 脚本来解析测试结果),但是到目前为止我找不到解决方案(我尝试覆盖 ENTRYPOINT,不同的组合ENTRYPOINT 和 CMD,但没有成功)。

这是我当前的 Dockerfile 的样子:

FROM denvazh/gatling:2.2.3

RUN apk update \
&& apk add -U bash \
&& apk add nodejs=6.7.0-r0

COPY simulations /opt/gatling/user-files/simulations
COPY trigger-test-and-parser.sh /opt/gatling/

RUN chmod +x /opt/gatling/trigger-test-and-parser.sh

ENTRYPOINT ["bash", "/opt/gatling/trigger-test-and-parser.sh"]

这是我用来基于我的 Dockerfile 构建映像的命令:

docker build --no-cache -t gatling-nodejs:v8 .

这是我用来运行容器的命令:

docker run -i -v "$PWD/results":/opt/gatling/results -v "$PWD":/opt/gatling/git.campmon.com/rodrigot/platform-hps-perf-test gatling-nodejs:v8

这是我想在容器启动后执行的 shellscript (trigger-test-and-parser.sh)(它应该触发 Gatling,然后运行我的 NodeJS 解析器):

gatling.sh -s MicroserviceHPSPubSubRatePerfTest.scala
node publish-rate-to-team-city.js

有什么想法或调整,以便我可以在容器启动后同时运行这两个命令吗?

非常感谢!

【问题讨论】:

  • 您的docker rungatling-nodejs:v7 结尾,是不是拼写错误?我以为它会以 8 而不是 7 结尾。
  • 这是一个错字,对不起。刚刚更新! :)
  • 试试你的gatlin.sh cmd1 ; cmd2 ; sleep infinity

标签: node.js docker gatling


【解决方案1】:

ENTRYPOINT 设置为/usr/bin/env。然后将CMD 设置为您要运行的内容。

【讨论】:

  • 这很好用,但有什么解释吗?一方面,我很惊讶覆盖 ENTRYPOINT 并不是一件简单直接的事情。
  • 无法删除基础映像中的ENTRYPOINT 设置,因此唯一的选择是用其他内容替换它。 /usr/bin/env 程序在这方面很方便,因为它会执行您作为参数提供的任何命令。有关使用它执行此操作的更多详细信息,请参见 env 的手册页。
  • 可以使用 docker run 命令 --entrypoint /usr/bin/env
  • 一个快速说明进一步解释它:我们不能只用空白值覆盖 ENTRYPOINT(即[]),所以使用 env 将允许我们覆盖它,然后我们提供给 CMD 的所有内容都将被传递到 env 中,使它可以便携地运行它们,就像我们在 shell 脚本的顶部添加诸如 #!/usr/bin/env bash 之类的 shebang。
【解决方案2】:

格雷厄姆的上述想法非常有效。再次感谢!

为了将来参考,这里是我必须添加到我的 Dockerfile 中的两行:

ENTRYPOINT ["/usr/bin/env"]

CMD ["bash", "/opt/gatling/trigger-test-and-parse-result.sh"]

【讨论】:

    猜你喜欢
    • 2018-11-26
    • 2020-01-27
    • 2018-08-08
    • 2022-01-09
    • 2020-04-01
    • 2020-10-17
    • 2021-02-07
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多