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

Docker如何使用Python?Centos上Docker化Jupyter资源异常及进程问询

Docker如何使用Python?

日常用Docker跑Python程序主要有几种常见方式,我给你捋清楚:

  • 直接用官方镜像快速运行脚本
    官方维护了全版本的Python镜像,直接拉取就能用。比如你本地有个test.py脚本,只需两步:

    1. 拉取镜像:docker pull python:3.11(选你需要的版本)
    2. 挂载本地目录并运行脚本:docker run --rm -v $(pwd):/app python:3.11 python /app/test.py
      这里--rm是容器运行完自动删除,-v把本地当前目录挂载到容器的/app目录,这样容器就能访问你的脚本了。
  • 自定义Dockerfile构建专属环境
    如果你的项目需要特定依赖,直接用官方镜像不够,就写个Dockerfile来构建:
    举个简单的例子:

    # 基础镜像用Python 3.11
    FROM python:3.11-slim
    
    # 设置工作目录
    WORKDIR /app
    
    # 先复制依赖文件,利用Docker缓存加快构建
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    
    # 复制项目代码
    COPY . .
    
    # 运行程序
    CMD ["python", "main.py"]
    

    然后构建镜像:docker build -t my-python-app .
    运行容器:docker run --rm my-python-app

  • 启动交互式Python环境
    要是想临时测试代码,直接启动交互式容器:
    docker run -it --rm python:3.11 python
    进入后就和本地的Python交互环境一样用,退出后容器自动删除,很方便。


Centos服务器上Docker化Jupyter Notebook资源占用问题排查

你遇到的情况挺典型的,咱们先拆解核心问题,再给解决方案:

为什么top能看到Python进程,但pgrep查不到?

Docker容器的进程是运行在独立的Linux命名空间里的,宿主机上看到的进程PID是宿主机命名空间的ID,而容器内的进程命令行在宿主机的ps/top里可能会被截断,或者进程名的显示和你预期的不一样。比如Jupyter的内核进程在宿主机上的命令行可能是python -m ipykernel_launcher -f /.../jupyter/kernel-xxx.json,如果你的pgrep -af python没匹配到,大概率是命令行被截断,或者pgrep的匹配规则没覆盖到。

你可以试试这两步确认:

  1. 在top里记下那个占用资源的Python进程PID,然后用ps aux | grep <PID>看完整的命令行,就能知道是不是匹配问题。
  2. 直接进入容器内部查看进程:docker exec -it <你的容器ID/名称> bash,然后在容器里用pgrep -af python,肯定能看到所有Jupyter相关的Python实例——毕竟并行任务的子进程都是在容器内部fork出来的。

shm-size参数和资源占用的关系

你设置的shm-size是给容器的共享内存分区/dev/shm扩容的,Jupyter用multiprocessing这类并行库时确实会用到共享内存,但这个参数本身不会导致进程不可见,也不会直接引发资源占用过高,只是避免共享内存不足导致任务报错。

解决服务器运行缓慢的方案

  1. 给容器设置资源限制
    启动容器时直接加上CPU和内存限制,避免单个容器把宿主机资源吃光:

    docker run --cpus 2 --memory 4g --shm-size 4g -p 8888:8888 jupyter/notebook
    

    这里--cpus 2限制容器最多用2个CPU核心,--memory 4g限制最多用4G内存,根据你的服务器配置调整就行。

  2. 排查容器内的具体任务
    进入容器后用top或者htop看哪个Python进程占用资源最高,找到对应的Jupyter内核(可以看命令行里的kernel ID),然后在Jupyter界面里终止那个占用资源的任务。

  3. 用Docker自带的工具监控资源
    不用依赖宿主机的top,直接用docker stats <容器ID/名称>就能实时查看容器的CPU、内存、磁盘IO使用情况,数据更准确,也不用管命名空间的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:07:31