dek*_*iya 7 bash shell docker kubernetes google-kubernetes-engine
TL; DR:我应该如何编写 aDockerfile或 docker 命令来运行 docker 容器,以便在点击 时可以停止并退出正在运行的 docker 容器ctrl+c?
我需要在 shell 脚本中运行无限 while 循环。当我在本地运行此脚本时,该ctrl+c命令将退出无限循环。
# content of sync.sh
while true; do
echo "Do something!"
some_syncing_command || {
rm -rf /tmp/healthy && break
}
echo "Finish doing something!"
touch /tmp/healthy
sleep ${waitingSeconds}
done
Run Code Online (Sandbox Code Playgroud)
因此,基于 shell 脚本,我创建了一个包含以下Dockerfile内容的 Docker 镜像:
FROM debian:stretch
COPY sync.sh .
ENTRYPOINT ["/sync.sh"]
Run Code Online (Sandbox Code Playgroud)
并通过运行构建图像docker build -t infinite-loop .
但是,在尝试不同的尝试运行infinite-loop图像后,我无法在点击后停止并退出正在运行的 docker 容器ctrl + c。以下是我用来运行 docker 镜像的 docker 命令:
docker run --rm to-infinity-1 infinite-loopdocker run --rm -it to-infinity-2 infinite-loopdocker run --rm -d to-infinity-3 infinite-loop,然后docker attach继续运行to-infinity-3以上所有命令ctrl+c直接执行后都无法停止并退出无限循环。因此我需要运行docker stop [container-name]来停止无限循环的运行容器。我应该在实施中改变什么来解决这个问题?
谢谢。
编辑:附加上下文,我将 kubernetes 与无限循环容器一起使用。ctrl+c我想知道如果我想优雅地停止并退出正在运行的 pod,这个问题(与 SIGINT 相关)是否会干扰 kubernetes。请注意,尽管ctrl+c存在问题,但我仍然能够用来docker stop停止正在运行的容器。
小智 12
\xe2\x80\x9cdocker run\xe2\x80\x9d 捕获或忽略 ctrl+c。
\n\n如果您不想丢失 xe2x80x99 的 shell,您可以尝试从同一 docker 主机上的另一个终端停止容器。
\n\n打开一个新的shell并执行
\n\n$ docker ps # get the id of the running container\n$ docker stop <container> # kill it (gracefully)\nRun Code Online (Sandbox Code Playgroud)\n\n容器进程将结束,您的原始 shell 将被释放。
\n