Docker - 从基本映像覆盖或删除ENTRYPOINT

use*_*130 7 node.js gatling docker

我正在使用Docker(版本1.12.2,构建bb80604)来设置带有Gatling(负载测试工具)+ NodeJS的简单图像/容器.所以,我拉了这个Docker/Gatling基础图像并创建了我自己的Dockerfile来安装NodeJS.

但是,上面的Docker/Gatling基本图像已经定义了ENTRYPOINT,可以直接调用Gatling,然后自动退出容器.它看起来像这样:

ENTRYPOINT ["gatling.sh"]
Run Code Online (Sandbox Code Playgroud)

我想要实现的是:我想运行第二个命令(我自己的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"]
Run Code Online (Sandbox Code Playgroud)

这是我用来根据我的Dockerfile构建我的图像的命令:

docker build --no-cache -t gatling-nodejs:v8 .
Run Code Online (Sandbox Code Playgroud)

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

docker run -i -v "$PWD/results":/opt/gatling/results -v "$PWD":/opt/gatling/git.campmon.com/rodrigot/platform-hps-perf-test gatling-nodejs:v8
Run Code Online (Sandbox Code Playgroud)

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

gatling.sh -s MicroserviceHPSPubSubRatePerfTest.scala
node publish-rate-to-team-city.js
Run Code Online (Sandbox Code Playgroud)

任何想法或调整,所以我可以在容器启动后运行这两个命令?

非常感谢!

Gra*_*ton 13

设置ENTRYPOINT/usr/bin/env.然后设置CMD为你想要的运行.

  • 无法删除基础映像中的 ``ENTRYPOINT`` 设置,因此唯一的选择是将其替换为其他内容。``/usr/bin/env`` 程序在这方面很方便,因为它会执行您作为参数给出的任何命令。有关使用它来执行此操作的更多详细信息,请参阅“env”的手册页。 (2认同)

use*_*130 5

格雷厄姆的上述想法运作良好。再次感谢!

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

ENTRYPOINT ["/usr/bin/env"]

CMD ["bash", "/opt/gatling/trigger-test-and-parse-result.sh"]
Run Code Online (Sandbox Code Playgroud)