gpt4 book ai didi

linux - 从 Docker 容器内部杀死子进程会杀死整个容器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:31 26 4
gpt4 key购买 nike

在我的 Windows 机器上,我从 docker compose 启动了一个 Docker 容器。我的入口点是一个 Go filewatcher,它在每次文件更改时运行任务管理器的任务。执行的任务构建并运行 Go 程序。

但是在我可以在文件更改后再次构建和运行程序之前,我必须终止之前运行的版本。但是每次我杀死应用程序进程时,容器也不见了。

在此示例中,目标是仅终止 PID 为 74 的 svc1 进程。我尝试了 pkill -9 svc1kill $(pgrep svc1)。但是每次父进程也被杀死。

容器内部的命令行输出:

root@bf073c39e6a2:/app/cmd/svc1# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 2.5 0.0 104812 2940 ? Ssl 13:38 0:00 /go/bin/watcher
root 13 0.0 0.0 294316 7576 ? Sl 13:38 0:00 /go/bin/task de
root 74 0.0 0.0 219284 4908 ? Sl 13:38 0:00 /svc1
root 82 0.2 0.0 18184 3160 pts/0 Ss 13:38 0:00 /bin/bash
root 87 0.0 0.0 36632 2824 pts/0 R+ 13:38 0:00 ps -aux
root@bf073c39e6a2:/app/cmd/svc1# ps -afx
PID TTY STAT TIME COMMAND
82 pts/0 Ss 0:00 /bin/bash
88 pts/0 R+ 0:00 \_ ps -afx
1 ? Ssl 0:01 /go/bin/watcher -cmd /go/bin/task dev -startcmd
13 ? Sl 0:00 /go/bin/task dev
74 ? Sl 0:00 \_ /svc1
root@bf073c39e6a2:/app/cmd/svc1# pkill -9 svc1
root@bf073c39e6a2:/app/cmd/svc1

切换到容器日志:

task: Failed to run task "dev": exit status 255
2019/08/16 14:20:21 exit status 1

“dev”是任务管理器中任务的名称。

Dockerfile:

FROM golang:stretch
RUN go get -u -v github.com/radovskyb/watcher/... \
&& go get -u -v github.com/go-task/task/cmd/task
WORKDIR /app
COPY ./Taskfile.yml ./Taskfile.yml
ENTRYPOINT ["/go/bin/watcher", "-cmd", "/go/bin/task dev", "-startcmd"]

我希望只有具有目标 PID 的进程被终止,而不是生成它的父进程。

最佳答案

您可以使用“supervisord”之类的进程管理器,并将其配置为重新执行您的脚本或命令,即使您终止了它的进程,这将使您的容器保持正常运行。

关于linux - 从 Docker 容器内部杀死子进程会杀死整个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57526449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com