这里以ultralytics为例  
克隆代码: git clone https://gitee.com/monkeycc/ultralytics.git
将代码放到服务器中,然后cd ultralytics; cp ultralytics/docker/Dockerfile ./

一. 创建镜像

        因为网络问题,根据官方Dockerfile进行修改 ,将Arial.Unicode.ttf,Arial.ttf,yolo26n.pt 提前下载好,放到Dockerfile同目录下.   下载地址:https://github.com/ultralytics/assets/releases/download/v0.0.0/Arial.ttf    
https://github.com/ultralytics/assets/releases/download/v0.0.0/Arial.Unicode.ttf
https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n.pt

docker build -f Dockerfile -t ultralytics:v1 .

# Dockerfile 的内容  如下:
FROM nvcr.io/nvidia/pytorch:25.02-py3

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PIP_NO_CACHE_DIR=1 \
    PIP_BREAK_SYSTEM_PACKAGES=1 \
    UV_BREAK_SYSTEM_PACKAGES=1 \
    MKL_THREADING_LAYER=GNU \
    OMP_NUM_THREADS=1 \
    TF_CPP_MIN_LOG_LEVEL=3 \
    TORCH_CPP_LOG_LEVEL=ERROR

RUN mkdir -p /root/.config/Ultralytics/

COPY Arial.ttf /root/.config/Ultralytics/Arial.ttf

COPY Arial.Unicode.ttf /root/.config/Ultralytics/Arial.Unicode.ttf

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    gcc git zip unzip wget curl htop libgl1 libglib2.0-0 gnupg libsm6 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /ultralytics

COPY . .

RUN sed -i '/^\[http "https:\/\/github\.com\/"\]/,+1d' .git/config && \
    sed -i'' -e 's/"opencv-python/"opencv-python-headless/' pyproject.toml

RUN pip install uv

RUN uv pip install --system -e "." albumentations faster-coco-eval nvidia-ml-py 

FROM nvcr.io/nvidia/pytorch:25.02-py3 要根据你的NVIDIA显卡驱动版本来定,我用的22.02-py3

如果FROM设为: FROM pytorch/pytorch:2.11.0-cuda12.8-cudnn9-runtime ,会报错:

[+] Building 30.0s (2/2) FINISHED                                                        docker:default
 => [internal] load build definition from Dockerfile-conda                                         0.0s
 => => transferring dockerfile: 2.23kB                                                             0.0s
 => ERROR [internal] load metadata for docker.io/continuumio/miniconda3:latest                    30.0s
------
 > [internal] load metadata for docker.io/continuumio/miniconda3:latest:
------
Dockerfile-conda:7
--------------------
   5 |
   6 |     # Start FROM miniconda3 image https://hub.docker.com/r/continuumio/miniconda3
   7 | >>> FROM continuumio/miniconda3:latest
   8 |
   9 |     # Set environment variables
--------------------
ERROR: failed to solve: DeadlineExceeded: DeadlineExceeded: DeadlineExceeded: continuumio/miniconda3:latest: failed to resolve source metadata for docker.io/continuumio/miniconda3:latest: failed to do request: Head "https://registry-1.docker.io/v2/continuumio/miniconda3/manifests/latest": dial tcp 108.160.165.189:443: i/o timeout
 

解决方式:配置国内的镜像加速器,我这里选的阿里云

1)登录阿里云官网AI 加速季,智惠生产力->注册账号
2)在首页搜索 “容器镜像加速” 选择 

3)获取镜像加速器地址

ACR会为每一个账号(阿里云账号或RAM用户)生成一个镜像加速器地址,配置镜像加速器前,您需要获取镜像加速器地址。

  1. 登录容器镜像服务控制台

  2. 在左侧导航栏选择镜像工具 > 镜像加速器

  3. 镜像加速器页面获取加速器地址

        您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://******.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

        配置完后,应该就不会报错了,但我用的别人的服务器,没有root权限,无法修改daemon.json文件。

        这段暂时这样吧,无法验证,后续再完善

二. 查询镜像信息

docker images

三. 创建容器

docker run -it --ipc=host --runtime=nvidia --gpus all ultralytics:v1 

        在创建镜像的时候,已经把ultralytics的代码都拷贝进去了
        如果要通过挂载的方式,也可以修改Dockfile,然后添加 -v 参数创建容器

// 下面选一个命令就行,或者看情况自己组合
// 只创建容器
docker create -it --name ultralytics-workspace -v $(pwd):/workspace ultralytics:v1 /bin/bash	

// 创建容器并运行 随机命名	
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v ./ultralytics:/ultralytics ultralytics:v1 /bin/bash
	
// 指定名称		
docker run -it --name ultralytics-workspace -v $(pwd):/workspace ultralytics:v1 /bin/bash	
	
docker create -it --name ultralytics-workspace --privileged -v /dev/bus/usb:/dev/bus/usb -v $(pwd)/work3588:/workspace ultralytics:v1 /bin/bash

    --privileged(特权模式)是一个极其强大的参数。简单来说,它相当于赋予了容器近乎等同于宿主机 root 用户的全部权限
    -v ./ultralytics:/ultralytics  是本地的哪个目录挂载到容器的哪个位置
    ultralytics:v1 是镜像名

// 使用这个命令吧
docker run -it --name yolovx --ipc=host --runtime=nvidia --gpus all -v "$PWD/../../ultralytics:/ultralytics" ultralytics:v1 

四. 查看正在运行的容器

docker ps -a

五. 停止、启动、删除容器

docker stop yolovx 	// 停止容器
docker rm yolovx 	// 删除容器
docker start yolovx 	// 启动容器

六. 进入已创建并启动的容器

docker exec -it yolovx bash

七. 进入后,执行

        yolo predict model=yolo26n.pt source="ultralytics/assets/bus.jpg"

报错:

Traceback (most recent call last):
  File "/opt/conda/bin/yolo", line 4, in <module>
    from ultralytics.cfg import entrypoint
  File "/ultralytics/ultralytics/__init__.py", line 13, in <module>
    from ultralytics.utils import ASSETS, SETTINGS
  File "/ultralytics/ultralytics/utils/__init__.py", line 24, in <module>
    import cv2
  File "/opt/conda/lib/python3.8/site-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "/opt/conda/lib/python3.8/site-packages/cv2/__init__.py", line 175, in bootstrap
    if __load_extra_py_code_for_module("cv2", submodule, DEBUG):
  File "/opt/conda/lib/python3.8/site-packages/cv2/__init__.py", line 28, in __load_extra_py_code_for_module
    py_module = importlib.import_module(module_name)
  File "/opt/conda/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/opt/conda/lib/python3.8/site-packages/cv2/gapi/__init__.py", line 290, in <module>
    cv.gapi.wip.GStreamerPipeline = cv.gapi_wip_gst_GStreamerPipeline
AttributeError: partially initialized module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline' (most likely due to a circular import)

降版本等,各种方式都试了,都没用~~~放弃了!!!

补充:

        根据官方Dockerfile,重头搭建没搞成~~~那就用现成的吧
        毫秒镜像 - 国内Docker镜像加速下载平台 | 容器镜像仓库极速拉取服务

        进入毫秒镜像中,搜索ultralytics获取
                docker pull docker.1ms.run/ultralytics/ultralytics:latest

        在终端输入:

                docker pull docker.1ms.run/ultralytics/ultralytics:latest

                docker tag docker.1ms.run/ultralytics/ultralytics:latest ultralytics:v1        # 这个可以省略

                docker rmi docker.1ms.run/ultralytics/ultralytics:latest        # 这个可以省略

                docker run -it --ipc=host --runtime=nvidia --gpus all ultralytics:v1

        进入镜像容器后,输入:

                yolo predict model=yolo26n.pt source="ultralytics/assets/bus.jpg"

                结果如下:

                正常运行!完结!


 

更多推荐