elf2部署官方yolov5模型

news/2025/2/4 14:03:09/文章来源:https://www.cnblogs.com/smallwxw/p/18698176

ELF2开发板(飞凌嵌入式)搭建深度学习环境部署(RKNN环境部署)

本人主要介绍用于elf2的rk3588开发板的深度学习环境的搭建,和官方的方法不同,对于新手比较友好。零基础即可搭建,本人使用的是WSL2系统,当然使用虚拟机也是可以的,本人主要教学搭建yolov5模型转换为rknn的环境搭建,以及基本步骤,从该文章您可以学习到rk3588等瑞芯微芯片的所有模型环境部署。

安装docker环境(已安装过的可以跳过)

安装docker依赖的基础软件
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
添加官方来源
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
安装 docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

RKNN环境搭建

   本文主要是使用RKNN-Toolkit2和RKNN Model Zoo将yolov5模型进行量化部署转换为rknn模型,并编译好基本脚本上传至开发板。

模型工具的介绍

RKNN-Toolkit2

   RKNN-Toolkit2 是由瑞芯微电子开发的一套深度学习模型优化和推理工具。它支持多种深度学习框
架(如 Caffe、TensorFlow、PyTorch 等)的模型转换为 RKNN 格式,并提供了模型转换、量化、推理等功能。RKNN-Toolkit2 主要面向在瑞芯微 SoC 上进行 AI 应用开发,但也可以用于 PC 平台进行模型的转换、量化、推理等操作。

主要功能
  1. 模型转换:RKNN-Toolkit2支持将多种主流框架(如 TensorFlow、PyTorch、Caffe 等)训练得到的模型转换为RKNN模型,以便在 Rockchip 的硬件平台上运行。
  2. 模型优化:工具包提供了模型优化功能,可以对转换后的 RKNN 模型进行进一步的优化,以提高
    模型在 Rockchip NPU 上的运行效率。
  3. 模型部署:通过 RKNN-Toolkit2,用户可以将优化后的 RKNN 模型部署到 Rockchip 的开发板上,进行 实际的推理测试和应用开发。

RKNN-Toolkit2仓库链接:https://github.com/airockchip/rknn-toolkit2

RKNN-Toolkit-Lite2

   RKNN-Toolkit-Lite2 是 Rockchip 为其轻量级神经网络处理单元(NPU)提供的一款工具包。它专注于简化和加速深度学习模型在 Rockchip 硬件平台上的部署和推理过程。与 RKNN-Toolkit2 相比,RKNN-Toolkit-Lite2 主要针对轻量级应用和较小的计算需求进行优化。

主要功能
  1. 模型转换:支持将多种主流深度学习框架(如 TensorFlow Lite、ONNX 等)训练得到的模型转换为 RKNN Lite 模型,便于在 Rockchip 的轻量级 NPU 上进行推理。
  2. 模型优化:提供了针对轻量级模型的优化功能,以提高模型在 Rockchip 轻量级 NPU 上的运行效率和速度。
  3. 推理部署:使得优化后的 RKNN Lite 模型可以在 Rockchip 的开发板或嵌入式设备上进行推理,适合实时应用场景。

RKNN-Toolkit-Lite2仓库链接:https://github.com/airockchip/rknn-toolkit2/tree/master/rknn-toolkit-lite2

RKNPU2

   RKNPU2 是 Rockchip 推出的一个跨平台的编程接口,主要用于帮助用户部署使用 RKNN Toolkit2导出的 RKNN 模型,从而加速 AI 应用的落地。
RKNPU2 的架构设计目标是优化深度学习模型的执行效率,其核心是一个专门为机器 学习任务定制
的硬件加速器。

主要功能
  1. 高效性能:RKNPU2 设计的目标是提供高吞吐量和低延迟,使复杂的 AI 算法得以快速执行。
  2. 低功耗:相比于 CPU 和 GPU,NPU 在执行特定 AI 任务时,能显著降低能耗,延长设备电池寿命。
  3. 灵活的 API 支持:开发者可以选择多种编程方式,如 C/C++、Python,或者直接使用预先训 练好的模型。
  4. 跨平台兼容:RKNPU2 可适配多种操作系统,包括 Linux 和 Android,方便在不同设备上部署。
  5. 开源社区:得益于开源模式,用户可以贡献代码,共同改进和完善项目,推动技术进步。

RKNPU2仓库链接: https://github.com/airockchip/rknn-toolkit2/tree/master/rknpu2

RKNN Model Zoo

   RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程,RKNN Model Zoo依赖 RKNN-Toolkit2 进行模型转换.
RKNN Model Zoo仓库链接:https://github.com/airockchip/rknn_model_zoo

环境搭建(干货)

  • 下载好瑞芯微的RKNN的docker镜像

RKNN的docker镜像链接:https://meta.zbox.filez.com/v/link/view/ef37a9687973439f94f5b06837f12527,提取码为提取码:rknn

elf2开发板的rknn的版本为2.1,那么我们下载2.1版本的docker镜像,docker后缀名的为docker镜像,另一个为rknn-toolkit2的资源文件,和上文rknn-toolkit2仓库内容基本一致

picture 0

图1 文件图1

picture 1

图2 文件图2

在rknn-toolkit2仓库的release有不同版本的介绍,例如下图。

picture 2

图3 版本图
  • 下载rknn_model_zoorknn-toolkit2

rknn_model_zoo的2.1版本链接:https://github.com/airockchip/rknn_model_zoo/tree/v2.1.0,直接切换到v2.1.0分支或者在release进行下载2.1版本。

picture 3

图3 资源图1

rknn-toolkit2的2.1版本链接:https://github.com/airockchip/rknn-toolkit2/releases,同理切换到v2.1.0分支或者release中下载v2.1版本

picture 4

图4 资源图2
  • RKNNdocker镜像的导入以及环境的搭建

加载docker镜像并创建容器

docker load -i rknn-toolkit2-2.1.0-cp38-docker.tar
root@LAPTOP-U638FQQS:/# docker images
REPOSITORY        TAG          IMAGE ID       CREATED        SIZE
pulsar2           3.2-patch1   e96811ac0921   3 months ago   2.58GB
rknn-toolkit2     2.1.0-cp38   2c0940f24482   6 months ago   6.32GB
sophgo/tpuc_dev   latest       191a433358ad   8 months ago   7.75GBdocker run -it -v $HOME:/home/host_home rknn-toolkit2:2.1.0-cp38
apt-get install cmake wget
root@5c542f109d4c:/# ls
bin   dev  home  lib32  libx32  mnt  proc                                                     root  sbin  sys  usr
boot  etc  lib   lib64  media   opt  rknn_toolkit2-2.1.0+708089d1-cp38-cp38-linux_x86_64.whl  run   srv   tmp  var
root@5c542f109d4c:/# 

下载交叉编译工具链并复制到docker容器中(https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/)
指定交叉编译工具链路径(记得下载x86_64_aarch64,别下载成了i686)

export GCC_COMPILER=~/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu 
  • yolov5模型转rknn,并编译运行程序
root@5c542f109d4c:/mnt# cd rknn_model_zoo-2.1.0
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/model# ./download_model.sh 
--2025-02-04 05:44:59--  https://ftrg.zbox.filez.com/v2/delivery/data/95f00b0fc900458ba134f8b180b3f7a1/examples/yolov5/yolov5s_relu.onnx
Resolving ftrg.zbox.filez.com (ftrg.zbox.filez.com)... 180.184.171.46
Connecting to ftrg.zbox.filez.com (ftrg.zbox.filez.com)|180.184.171.46|:443... connected.
HTTP request sent, awaiting response... 200 
Length: 28935807 (28M) [application/octet-stream]
Saving to: './yolov5s_relu.onnx'./yolov5s_relu.onnx              100%[========================================================>]  27.59M  10.0MB/s    in 2.7s    2025-02-04 05:45:03 (10.0 MB/s) - './yolov5s_relu.onnx' saved [28935807/28935807]root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/model# 
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5# cd python/
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/python# ls
convert.py  yolov5.py
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/python# python3 ./convert.py ../model/yolov5s_relu.onnx rk3588

python3 ./convert.py ../model/yolov5s_relu.onnx rk3588转化模型为rk3588平台的rknn模型

输出结果

root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/python# python3 ./convert.py ../model/yolov5s_relu.onnx rk3588
I rknn-toolkit2 version: 2.1.0+708089d1
--> Config model
done
--> Loading model
I Loading : 100%|██████████████████████████████████████████████| 121/121 [00:00<00:00, 16813.34it/s]
done
--> Building model
I OpFusing 0: 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 2365.08it/s]
I OpFusing 1 : 100%|████████████████████████████████████████████| 100/100 [00:00<00:00, 1139.61it/s]
I OpFusing 2 : 100%|████████████████████████████████████████████| 100/100 [00:00<00:00, 1050.44it/s]
I GraphPreparing : 100%|████████████████████████████████████████| 149/149 [00:00<00:00, 6884.39it/s]
I Quantizating : 100%|████████████████████████████████████████████| 149/149 [00:30<00:00,  4.96it/s]
W build: The default input dtype of 'images' is changed from 'float32' to 'int8' in rknn model for performance!Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of 'output0' is changed from 'float32' to 'int8' in rknn model for performance!Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '286' is changed from 'float32' to 'int8' in rknn model for performance!Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '288' is changed from 'float32' to 'int8' in rknn model for performance!Please take care of this change when deploy rknn model with Runtime API!
I rknn building ...
I rknn buiding done.
done
--> Export rknn model
done

covert.py代码转化代码

import sysfrom rknn.api import RKNNDATASET_PATH = '../../../datasets/COCO/coco_subset_20.txt'
DEFAULT_RKNN_PATH = '../model/yolov5.rknn'
DEFAULT_QUANT = Truedef parse_arg():if len(sys.argv) < 3:print("Usage: python3 {} onnx_model_path [platform] [dtype(optional)] [output_rknn_path(optional)]".format(sys.argv[0]))print("       platform choose from [rk3562,rk3566,rk3568,rk3576,rk3588,rv1103,rv1106,rk1808,rv1109,rv1126]")print("       dtype choose from [i8, fp] for [rk3562,rk3566,rk3568,rk3576,rk3588,rv1103,rv1106]")print("       dtype choose from [u8, fp] for [rk1808,rv1109,rv1126]")exit(1)model_path = sys.argv[1]platform = sys.argv[2]do_quant = DEFAULT_QUANTif len(sys.argv) > 3:model_type = sys.argv[3]if model_type not in ['i8', 'u8', 'fp']:print("ERROR: Invalid model type: {}".format(model_type))exit(1)elif model_type in ['i8', 'u8']:do_quant = Trueelse:do_quant = Falseif len(sys.argv) > 4:output_path = sys.argv[4]else:output_path = DEFAULT_RKNN_PATHreturn model_path, platform, do_quant, output_pathif __name__ == '__main__':model_path, platform, do_quant, output_path = parse_arg()# Create RKNN objectrknn = RKNN(verbose=False)# Pre-process configprint('--> Config model')rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform=platform)print('done')# Load modelprint('--> Loading model')ret = rknn.load_onnx(model=model_path)if ret != 0:print('Load model failed!')exit(ret)print('done')# Build modelprint('--> Building model')ret = rknn.build(do_quantization=do_quant, dataset=DATASET_PATH)if ret != 0:print('Build model failed!')exit(ret)print('done')# Export rknn modelprint('--> Export rknn model')ret = rknn.export_rknn(output_path)if ret != 0:print('Export rknn model failed!')exit(ret)print('done')# Releaserknn.release()

可以看到rknn模型转化成功

root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/model# ls
anchors_yolov5.txt  bus.jpg  coco_80_labels_list.txt  download_model.sh  yolov5.rknn  yolov5s_relu.onnx
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/model# 
  • 编译执行脚本
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0# ls
3rdparty  FAQ_CN.md  README.md     asset  build-android.sh  datasets  examples  scaling_frequency.sh
FAQ.md    LICENSE    README_CN.md  build  build-linux.sh    docs      py_utils  utils
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0# ./build-linux.sh -t rk3588 -a aarch64 -d yolov5

输出结果:

root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0# ./build-linux.sh -t rk3588 -a aarch64 -d yolov5
./build-linux.sh -t rk3588 -a aarch64 -d yolov5
/mnt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
===================================
BUILD_DEMO_NAME=yolov5
BUILD_DEMO_PATH=examples/yolov5/cpp
TARGET_SOC=rk3588
TARGET_ARCH=aarch64
BUILD_TYPE=Release
ENABLE_ASAN=OFF
INSTALL_DIR=/mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo
BUILD_DIR=/mnt/rknn_model_zoo-2.1.0/build/build_rknn_yolov5_demo_rk3588_linux_aarch64_Release
CC=/mnt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
CXX=/mnt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
===================================
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/rknn_model_zoo-2.1.0/build/build_rknn_yolov5_demo_rk3588_linux_aarch64_Release
[ 50%] Built target audioutils
[ 50%] Built target imagedrawing
[ 66%] Built target imageutils
[ 66%] Built target fileutils
[100%] Built target rknn_yolov5_demo
[ 16%] Built target fileutils
[ 33%] Built target imageutils
[ 50%] Built target imagedrawing
[ 83%] Built target rknn_yolov5_demo
[100%] Built target audioutils
Install the project...
-- Install configuration: "Release"
-- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/./rknn_yolov5_demo
-- Set runtime path of "/mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/./rknn_yolov5_demo" to "$ORIGIN/lib"
-- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/./model/bus.jpg
-- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/./model/coco_80_labels_list.txt
-- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/model/yolov5.rknn
-- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/lib/librknnrt.so
-- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/lib/librga.so
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0# 

打包/home/root/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo

root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64# tar -zcvf rknn_yolov5_demo.tar.gz rknn_yolov5_demo/
rknn_yolov5_demo/
rknn_yolov5_demo/model/
rknn_yolov5_demo/model/yolov5.rknn
rknn_yolov5_demo/model/bus.jpg
rknn_yolov5_demo/model/coco_80_labels_list.txt
rknn_yolov5_demo/lib/
rknn_yolov5_demo/lib/librknnrt.so
rknn_yolov5_demo/lib/librga.so
rknn_yolov5_demo/rknn_yolov5_demo
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64# 

上机实验

在上一节已经将开发板联网,直接scp或者拖拽上传到开发板并解压,执行可执行程序输出out.png照片如下图

tar -zxvf rknn_yolov5_demo.tar.gzroot@elf2-desktop:~# cd rknn_yolov5_demo/
root@elf2-desktop:~/rknn_yolov5_demo# ls
lib  model  rknn_yolov5_demo
root@elf2-desktop:~/rknn_yolov5_demo# chmod 777 rknn_yolov5_demo
root@elf2-desktop:~/rknn_yolov5_demo# ./rknn_yolov5_demo model/yolov5.rknn model/bus.jpg
load lable ./model/coco_80_labels_list.txt
model input num: 1, output num: 3
input tensors:index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
output tensors:index=0, name=output0, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922index=1, name=286, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922index=2, name=288, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
model is NHWC input fmt
model input height=640, width=640, channel=3
origin size=640x640 crop size=640x640
input image: 640 x 640, subsampling: 4:2:0, colorspace: YCbCr, orientation: 1
scale=1.000000 dst_box=(0 0 639 639) allow_slight_change=1 _left_offset=0 _top_offset=0 padding_w=0 padding_h=0
src width=640 height=640 fmt=0x1 virAddr=0x0x101eab10 fd=0
dst width=640 height=640 fmt=0x1 virAddr=0x0x10316b20 fd=0
src_box=(0 0 639 639)
dst_box=(0 0 639 639)
color=0x72
rga_api version 1.10.1_[0]
rknn_run
person @ (209 243 286 510) 0.880
person @ (479 238 560 526) 0.871
person @ (109 238 231 534) 0.840
bus @ (91 129 555 464) 0.692
person @ (79 353 121 517) 0.301
write_image path: out.png width=640 height=640 channel=3 data=0x101eab10
root@elf2-desktop:~/rknn_yolov5_demo#

picture 5

图5 上机实验过程图

picture 6

图6 上机实验结果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878540.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 中授权过滤器(Authorization Filters)

在ASP.NET Core 中,授权过滤器(Authorization Filters)是用于在请求到达控制器操作方法之前,验证用户是否具有执行该操作的权限的一种机制。授权过滤器的主要作用是确保用户在访问控制器或操作方法时,已通过身份验证并且有足够的权限。 授权过滤器的工作原理 授权过滤器在…

Roo Code插件搭配DeepSeek快速创建项目示例

一、环境准备 1. 安装VSCode 访问 Visual Studio Code官网 下载并安装最新版本 2. 安装IDEA(运行Java项目) 访问IDEA官网下载并安装最新Community社区版二、Roo Code插件配置 1. 安装插件打开VSCode扩展市场(Ctrl+Shift+X) 搜索 "Roo Code" 安装官方插件(确认发…

电子书查找阅读教程

免责声明本文仅作学习交流,对于喜欢的作者,建议支持正版。软件下载Github发布地址:https://github.com/gedoor/legado/releases 完整教学:https://www.yuque.com/legado/wiki/xz直接浏览器打开选择最新版本下载即可书源导入喵工资订阅源:https://dy.miaogongzi.cc/直接浏览…

性能测试会被AI替代吗?

最近,deepseek火了,不少测试小伙伴忧心忡忡,担心测试岗位被替代 我个人观点是:经验类测试技术短期内还是很难被替代的。大家也可以问问deepseek或者其它ai,我们来看下deepseek的观点: 附文字版:性能测试是否会被AI替代,取决于具体的测试场景、技术发展阶段以及人类与…

Java Stream 流

目录概述StreamOptional开始管道中间管道(中间操作)终止管道(终端操作)常用的 Stream 操作方法匹配(Match)查找(Find)遍历(ForEach)过滤(Filter)映射(Map)扁平映射(FlatMap)截断(Limit)跳过(Skip)排序(Sorted)去重(Distinct)汇总(Collect)归约(Redu…

R9000P能连接wifi但无法上网

问题描述:前一晚还正常使用,第二天打开就不能上网,可以连接WiFi,切换过不同WiFi都一样,排除WiFi原因,此时浏览器显示找不到DNS,估计就是dns解析出了问题 解决办法:先去CMD下,输入ipconfig /flushdns 再控制面板->网络和Internet->找到下图,点击WLAN点击属性,双…

PCIe扫盲——TLP Header详解(二)

下面用几个具体的例子来讲解TLP Header的格式与作用。因为内容较多,所以分为多篇文章分别进行介绍。第一篇(即本文)介绍IO Request、Memory Request和Configuration Request。第二篇文章(即TLP Header详解三)介绍Completion ,第三篇文章(即TLP Header详解四)介绍Messag…

PCIe扫盲——TLP Header详解(一)

事务层包(TLP)的一般格式如下图所示:前面的文章介绍过,TLP Header为3DW或者4DW,Data Payload为1-1024DW,最后的TLP Digest(ECRC)是可选的,为1DW。 TLP Header在整个TLP的位置如下图所示,需要注意的是,TLP Header的格式和内容都会随着TLP的类型和路由方式的改变而改变…

龙哥量化:deepseek写技术指标,deepseek写选股公式,通达信deepseek写公式太牛了

龙哥微信:Long622889代写通达信技术指标、选股公式(通达信,同花顺,东方财富,大智慧,文华,博易,飞狐)代写期货量化策略(TB交易开拓者,文华8,金字塔) 2025的deepseek火出天际了,用来写技术指标,量化策略岂不是爽歪歪,哈哈 先说使用体验, 第一:写代码确实很强,…

这个记录一下,困扰了很久,usb网卡被隐藏。

这个问题困扰了很久,直到今天用了这个搜索。才发现问题,照做之后,usb网卡回来了。终于笔记本不用在连网线了,只连typtc扩展坞就可以了。没想到禁用之后,还被隐藏!!! 解决的链接。 https://blog.csdn.net/ljason1993/article/details/85884992

docker中提示permission denied

docker中使用mount命令报错:mount: permission denied使用docker exec -it dokcerID bash进入docker容器中,显示的是root,权限应该是足够,但是使用mount命令一直提示permission denie,很明显是权限不足造成的查看docker历史版本文档,发现docker在0.6之后引入了privileged…