【发布时间】:2021-06-17 22:44:39
【问题描述】:
我正在尝试运行一个带有 2 个容器的 pod。主容器执行一个运行 cron 作业的 docker java 映像,另一个 sidecar(logstash) 容器读取日志并将其发送到 Kibana 服务器。当 cron 作业完成后,主容器完成,但边车容器继续运行,因为它没有正常关闭。我尝试了https://github.com/karlkfi/kubexit 和 preStop 容器生命周期挂钩,但没有奏效。 现在,我想尝试使用 dockerfile 停止 sidecar 容器。 Docker ENTRYPOINT exec java image jar,一旦 java 进程完成,我想在主容器内创建/触摸一个文件,我的另一个 sidecar 容器会查找该文件。
这是我当前的 dockerfile
FROM mcr.microsoft.com/java/jre:11-zulu-alpine
ARG projectVersion
WORKDIR /opt/example/apps/sync
COPY /target/sync-app-${projectVersion}.jar app.jar
ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar
我想在java进程执行完成后添加以下内容
echo "Going to kill sync-app container..."
trap 'touch /opt/example/apps/sync/container/done' EXIT
我真的很想知道是否可以在 ENTRYPOINT 执行完成后执行上述命令? (可能将这些命令添加到一个脚本中并将该脚本传递给 ENTRYPOINT)。但是,我不确定添加这些命令需要什么才能正确执行。
logstash 容器的代码用于查找文件(由第一个容器创建)
- args:
- |
dockerd-entrypoint.sh &
while ! test -f /opt/example/apps/sync/container/done; do
echo "Waiting for sync-app to finish..."
sleep 5
done
echo "sync-app finished, exiting"
exit 0
command:
- /bin/sh
- -c
如果需要更多信息,请告诉我。感谢您提前提供的所有帮助!
【问题讨论】:
标签: java docker kubernetes dockerfile kubernetes-pod