You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Docker容器停止后自动重启,如何彻底终止?

如何彻底终止自动重启的Docker容器?

我有一个基于Dockerfile构建的简单Python镜像:

FROM python:3.8-slim-buster
RUN apt-get -y update
RUN apt-get -y install git
RUN apt-get update \
 && apt-get install gcc -y \
 && apt-get clean
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install --upgrade pip
RUN pip3 install -r requirements.txt
ENTRYPOINT ["python"]

我曾用带restart: unless-stopped属性的docker-compose.yml运行该镜像。现在每次停止容器,它都会立即重启,表现得像设置了restart: always。哪怕改成restart: no、停止容器、重建镜像再重新执行docker run,问题还是存在。

核心问题:如何彻底终止这个容器?


更多细节

每次自动运行的命令如下(通过docker inspect --format "$(curl -s https://gist.githubusercontent.com/efrecon/8ce9c75d518b6eb863f667442d7bc679/raw/run.tpl)" <container id>获取):

docker run \
  --name "/src_python_run_b28e47065e14" \
  --runtime "runc" \
  --volume "/home/dir/src:/app:rw" \
  --log-driver "json-file" \
  --restart "" \
  --network "my-network_default" \
  --network-alias "src_python_run_b28e47065e14" \
  --network-alias "6116957bb6af" \
  --hostname "6116957bb6af" \
  --env "PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
  --env "LANG=C.UTF-8" \
  --env "PYTHON_VERSION=3.8.15" \
  --env "PYTHON_PIP_VERSION=22.0.4" \
  --env "PYTHON_SETUPTOOLS_VERSION=57.5.0" \
  --env "PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/66030fa0332b4914d4c4d089661a0bdeeeb274/public/get-pip.py" \
  --label "com.docker.compose.config-hash"="b2a7338a55582eb17895d8b5c2ee820d7c84ed2c900d7d7de0bb1fa787638d" \
  --label "com.docker.compose.container-number"="1" \
  --label "com.docker.compose.depends_on"="" \
  --label "com.docker.compose.image"="sha256:83d2d8f4fc6374f478b982ecc217caf34c58bccf4a497d182a6e1fe35e5e04" \
  --label "com.docker.compose.oneoff"="True" \
  --label "com.docker.compose.project"="src" \
  --label "com.docker.compose.project.config_files"="/home/dir/src/docker-compose.yml" \
  --label "com.docker.compose.project.working_dir"="/home/dir/src" \
  --label "com.docker.compose.service"="python" \
  --label "com.docker.compose.slug"="b28e47065e14275ac786d683ffcc7cc7489e3efef144d45ab9e2ad4bf48023" \
  --label "com.docker.compose.version"="2.5.0" \
  --attach stdin \
  --attach stdout \
  --attach stderr \
  --interactive \
  --entrypoint "python" \
  "src_python" \
  "-m" "test" "run" "--file" "true" 

有趣的更新

作为临时测试,我删除了docker-compose.yml和Dockerfile,确保没有容器能被重启。但奇怪的是,虽然容器已停止不再重启,但仍能在进程中看到它。执行ps aux | grep docker时,显示:

user  2963491  0.0  0.3 728792 24608 ?        Rl   17:01   0:00 docker-compose run python -m test run --file true

我尝试杀死该进程,但PID不断变化,说明进程被反复停止并重启,这是为什么?


解决方案

1. 停止并清理Docker Compose关联服务

执行以下命令,针对项目名src(从容器标签获取)停止所有关联服务并清理残留:

docker-compose -p src down --remove-orphans

--remove-orphans参数会清理所有未在当前配置中定义的关联容器,避免遗漏后台守护的进程。

2. 强制删除目标容器

如果容器仍在自动重启,直接强制删除容器:

docker rm -f src_python_run_b28e47065e14

或者通过容器名前缀批量删除:

docker rm -f $(docker ps -q --filter name=src_python)

3. 排查进程反复重启的根源

docker-compose run进程反复重启,大概率是由系统级守护任务触发的,按以下步骤排查:

  • 检查systemd服务:
    systemctl list-unit-files | grep docker
    systemctl status docker-compose@*
    
    查看是否有相关systemd单元在自动重启该任务,若有则停止并禁用:
    systemctl stop docker-compose@xxx.service
    systemctl disable docker-compose@xxx.service
    
  • 检查定时任务:
    crontab -l
    ls /etc/cron.d/
    cat /etc/crontab
    
    查看用户或系统级定时任务中是否有自动执行该命令的配置。
  • 检查监控工具:
    supervisorctl status
    
    若使用supervisor等进程管理工具,确认是否有相关配置在维护该进程。

4. 清理Docker残留资源

最后清理无用的镜像和卷,避免残留配置干扰:

docker image prune -f
docker volume prune -f

内容的提问来源于stack exchange,提问作者bcsta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:55:28