nvidia-docker配置深度学习环境服务器(cuda+cudnn+anaconda+python)

0、docker

0.0 docker 介绍

Docker官网:链接
Docker中文社区:链接
Docker Hub :链接

DevOps 开发运维
CI/CD 持续集成 持续部署

DockerHub 简书参考链接
什么是 DockerHub 以及为什么它很重要?
DockerHub 是一个由 Docker 公司运行和管理的基于云的存储库。它是一个在线存储库,Docker 镜像可以由其他用户发布和使用。有两种库:公共存储库和私有存储库。如果你是一家公司,你可以在你自己的组织内拥有一个私有存储库,而公共镜像可以被任何人使用。

你也可以使用公开发布的官方 Docker 镜像。DockerHub 上发布了数千镜像供你使用。DockerHub 作为默认存储库硬编码到 Docker 中,所以当你对任何镜像运行 docker pull 命令时,它将从 DockerHub 下载。

镜像和容器
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量和配置文件。
容器是镜像的运行实例,当被运行时有镜像状态和用户进程,可以使用docker ps 查看。

大白话讲解Docker是什么?
容器(动态),镜像运行实体(静态)
容器和虚拟机的区别?
虚拟机:就是模拟正泰机器包含硬件,每台虚拟机都需要自己的操作系统,虚拟机开启了,预分配资源全部被占用。

docker:和宿主机共享硬件资源及操作系统实现资源动态分配,与其他容器共享内核。
docker启动属于秒级,虚拟机启动需要几分钟
docker轻量,占用资源很少,一般一个容器才几十M
docker容器创建 删除 都是分钟的

  1. 查看内存:free -lh
  2. 查看版本:cat /etc/lsb-release
  3. 内核详细信息:cat /etc/os-release
  4. 内核基本信息:uname -r
  5. 显卡:nvidia-smi
  6. cuda版本:nvcc -V

nvidia-docker2的安装需要和docker版本一致,因此需要查询本地docker版本

sudo docker -v

然后查询可安装的nvidia-docker2及nvidia-container-runtime

apt-cache madison nvidia-docker2 nvidia-container-runtime

查看NVIDIA-Docker版本和docker版本:

nvidia-docker version

0.1 docker基本指令

基本指令:

搜索镜像:docker search 
获取镜像: docker pull
查看镜像:docker images
删除镜像:docker rmi

重启docker:systemctl start docker
docker版本:docker -v
随机启动nginx 容器 随机端口 docker run -d -p 80:80 --name mynginx nginx  -d表示后台运行  --name 别名

查看容器启动情况: docker ps
进入容器:docker exec -it id /bin/bash
查看日志情况:docker logs Name/ID
查看最近20行日志:docker logs  -f --tail -20 id

显示一个运行的容器里面的进程信息:docker top id
停止容器:docker stop id
启动容器:docker start id
查看容器启动情况:docker ps
查询所有容器:docker ps -a

强制停止容器:docker kill id
删除容器:docker rm id
强制删除容器:docker rm -f id

查看容器日志:docker logs id
首先docker images 查看容器名称和别名
批量停止容器:docker rm -f $(docker ps -aq)
docker run -d -p 81:80 --name myngin1 nginx

查看docker的硬盘空间使用情况:docker system df

0.2 docker 实例

eg:

sudo docker pull ubuntu #下拉一个镜像,如果本地没有进行网上下载
sudo docker run -i -t ubuntu /bin/bash #i 交互式操作 t 代表一个终端 ubuntu:镜像名字 /bin/bash 交互式shell  指令运行后进入ubuntu终端
cd home  #进入ubuntu home 目录
exit #退出这个容器
sudo docker ps #查询运行的容器
sudo docker ps -a #查询所有的容器 包括没有运行的容器
sudo start id # 启动停止的容器
sudo docker ps # 查看上条指令是否启动容器
sudo docker run -i -t -d --name ubuntu-test ubuntu /bin/bash  #d 后台使用 name进行名字命名
sudo docker stop id #停止容器
sudo docker ps # 查看是否停止容器
sudo docker restart id # 重启停止的容器
sudo docker ps # 查看容器是否重启
sudo docker attach id #进入终端
exit # 退出
sudo docker ps # 查看容器状态 容器退出终止
sudo docker restart id # 启动容器
sudo docker ps # 查看是否启动 启动
sudo docker exec -it id /bin/bash #进入容器
exit  # 退出容器
sudo docker ps # 容器没有终止

###########容器导出导入
mkdir ubuntu-t  #创建文件夹
cd ubuntu-t  # 进入文件夹
sudo docker export id > ubuntu.tar #导出
ls  # 显示ubuntu.tar 导出成功
cat /ubuntu.tar | sudo docker import - test/ubuntu:v1
sudo docker images #查看镜像是否导入成功
sudo docker ps -a #查询所有镜像
sudo docker rm -f id # 删除镜像

sudo docker pull training/webapp #拉镜像
sudo docker run -d -P training/webapp python app.py #运行镜像 大写的P
sudo docker ps
sudo docker run -d -p 5000:5000 training/webapp python app.py# 更改端口号  内部5000转本地5000 小写的p
sudo docker port id #
sudo docker logs -f id #运行日志查询
sudo docker top id #查询当前进程
sudo docker inspect id #查询配置与状态信息
sudo docker stop id #停止

sudo docker images # 镜像
sudo docker search httpd#查找镜像
sudo docker pull httpd# 拉镜像
sudo docker images
sudo docker rmi httpd#删除镜像
sudo docker ps #找容器
sudo docker commit -m="update" -a="fu" bf25 ubuntu-fu:v2  #创建镜像 
sudo docker images
mkdir Dockerfile  # 创建镜像的另一种方法
cd Dockerfile
gedit Dockerfile
	from ubuntu:18.04 
	run apt-get update
sudo docker build -t fu/ubuntu .#运行

1、nvidia最新驱动安装

若在容器中使用nvidia驱动,则需要安装nvidia-docker。(宿主机中已经安装好nvidia驱动)
宿主机手动安装与docker镜像文件中一致的nvidia驱动
参考链接:
https://blog.csdn.net/chxw098/article/details/79741586
https://blog.csdn.net/a12345676abc/article/details/84302513
安装前注意:安装nvidia-docker之前,需要先给宿主机安装nvidia驱动,docker内不需要安装驱动!

宿主机手动安装与docker镜像文件中一致的nvidia驱动

宿主机手动安装驱动:desktop版本和server版本驱动安装链接如下
https://blog.csdn.net/zml194849/article/details/121827610

2、docker 和nvidia-docker的安装

2.1 docker 的安装

1)可选操作,卸载旧版本

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update

2)安装软件包以允许apt通过HTTPS使用存储库:

sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common

3)添加Docker的官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -  

9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥 。

$ sudo apt-key fingerprint 0EBFCD88

pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) docker@docker.com
sub rsa4096 2017-02-22 [S]

4) 使用以下命令来设置稳定的存储库。请在以下命令中的单词后面添加nightly或test(或同时添加)stable。
注意:下面的lsb_release -cs子命令返回Ubuntu发行版的名称,例如xenial。有时,在Linux Mint等发行版中,您可能需要更改$(lsb_release -cs) 为父Ubuntu发行版。例如,如果您使用 Linux Mint Tessa,则可以使用bionic。Docker对未经测试和不受支持的Ubuntu发行版不提供任何保证。

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

jetson_nano命令(jetson_nano自带docker)

sudo add-apt-repository \
   "deb [arch=arm64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

5)更新apt包索引。

 sudo apt-get update

6.安装最新版本的Docker Engine-Community和containerd

sudo apt-get install docker-ce docker-ce-cli containerd.io

可选linux的安装后步骤
以非root用户身份管理Docker
Docker守护程序绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字由用户拥有root,其他用户只能使用sudo来访问它。Docker守护程序始终以root用户身份运行。
如果你不想在前言docker与命令sudo,创建一个名为UNIX组docker和用户添加到它。Docker守护程序启动时,它会创建一个可由该docker组成员访问的Unix套接字。
1.创建用户组

sudo groupadd docker

2.将您的用户添加到该docker组。

sudo usermod -aG docker $USER

3.注销并重新登录,以便重新评估您的组成员身份。
如果在虚拟机上进行测试,则可能需要重新启动虚拟机以使更改生效。
在桌面Linux环境(例如X Windows)上,完全注销会话,然后重新登录。
在Linux上,您还可以运行以下命令来激活对组的更改:

newgrp docker

4.验证您是否可以运行docker不带命令的命令sudo

docker run hello-world

在这里插入图片描述

docker version

在这里插入图片描述
完成

2.2 ubuntu完全卸载docker

  1. 删除某软件,及其安装时自动安装的所有包
sudo apt-get autoremove docker docker-ce docker-engine  docker.io  containerd runc
  1. 删除docker其他没有没有卸载
dpkg -l | grep docker
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P # 删除无用的相关的配置文件
  1. 卸载没有删除的docker相关插件(结合自己电脑的实际情况)
    在这里插入图片描述
sudo apt-get autoremove docker-ce-*

  1. 删除docker的相关配置&目录
sudo rm -rf /etc/systemd/system/docker.service.d
sudo rm -rf /var/lib/docker
  1. 确定docker卸载完毕
docker --version

2.3 安装nvidia-docker2

(1)移除之前的旧版本

docker volume ls -q -f driver=nvidia-docker | xargs -r -I{
   
   } -n1 docker ps -q -a -f volume={
   
   } | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

(2)添加环境配置

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update

(3)安装nvidia-docker2版本,备注:nvidia-docker2和nvidia-docker1区别后续说明。

sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

(4)安装 nvidia-container-runtime 软件包:

sudo apt-get install nvidia-container-runtime

(5)添加docker守护进程文件
docker的守护进程参数配置一般在文件 /etc/docker/daemon.json,在该文件中写入

{
   
   
    "default-runtime" : "nvidia",
 
    "runtimes": {
   
   
        "nvidia": {
   
   
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

配置完成后,重启docker

systemctl restart docker

(6)测试
从Docker Hub查找镜像—https://www.runoob.com/docker/docker-search-command.html

2.4 docker 示例

语法

docker search [OPTIONS] TERM
OPTIONS说明:
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-s :列出收藏数不小于指定值的镜像。

实例

从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像

runoob@runoob:~$ docker search -s 10 java
NAME                  DESCRIPTION                           STARS   OFFICIAL   AUTOMATED
java                  Java is a concurrent, class-based...   1037    [OK]       
anapsix/alpine-java   Oracle Java 8 (and 7) with GLIBC ...   115                [OK]
develar/java                                                 46                 [OK]
isuper/java-oracle    This repository contains all java...   38                 [OK]
lwieske/java-8        Oracle Java 8 Container - Full + ...   27                 [OK]
nimmis/java-centos    This is docker images of CentOS 7...   13                 [OK]

参数说明:

NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。

测试

sudo docker run -ti --rm nvidia/cuda:9.0-base nvidia-smi

sudo docker run --runtime=nvidia --rm 5aafb863776b nvidia-smi

(第一次运行该指令会先下载对应版本的镜像文件,可能耗时较长)
下载成功后会输出证明安装成功
在这里插入图片描述

2.5 nvidia-docker1和nvidia-docker2区别

那么两个版本之间有何区别呢?
(1) 虽然nvidia-docker1 和nvidia-docker2 都依赖于docker, 但版本1是一个整体的可行性文件,内部实现连接docker容器与硬件GPU,版本2将整体部分拆分层一个基于docker的薄封装(cat /usr/bin/nvidia-docker 可查看)和一个插件(nvidia-container-runtime , 该插件直接实现一个 hook的功能,连接GPU硬件),在版本2 的nvidia-docker 可发现,实际上还是运行docker ,只是指定了 --runtime 参数,同时指定GPU设备,默认全部GPU设备。
(2)当需要运行一个使用GPU的容器时,版本1 必须用nvidia-docker run/create 启动, 版本二可通过设置 守护进行default-runtime参数可直接通过 docker run/create 直接启动GPU容器
docker的守护进程参数配置一般在文件 /etc/docker/daemon.json

cat /etc/docker/daemon.json
[root@localhost hadoop]# cat /etc/docker/daemon.json
{
   
   
    "runtimes": {
   
   
        "nvidia": {
   
   
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

配置默认的插件环境 后

{
   
   
  "default-runtime" : "nvidia", 

  "runtimes": {
   
   
       		"nvidia": {
   
   
       			"path": "nvidia-container-runtime",
       			"runtimeArgs": []
      		}
  	}
}

配置完成后,重启docker

systemctl restart docker

docker容器的导入导出有两个方式docker export和docker import以及docker save和docker load。docker import和docker load导入都是导入成一个镜像,然后再跑一个容器。

docker export导出的是容器的快照,不会保存元数据。然后如果用这一种方式,就算你在你机器上创建的容器导出再导入都会出错。会使用不了GPU资源。所以,如果你想让其他人也使用也就需要使用docker save,docker save是针对镜像的,所以我们需要先将我们搭建好的docker容器提交为一个镜像:

sudo docker commit container-name image-name:version

sudo docker commit 容器id 镜像名(自定义):版本(自定义)
然后使用docker save命令导出就好(save命令导出的是docker镜像文件,注意与容器文件区分):

docker save -o image-name.tar image-name:version

然后就OK了

3、cuda10.2 docker拉取及docker ssh配置

3.1 deepstream5.0 镜像获取(适合无opencv需求场景)

1、环境配置
配置环境是一个很麻烦的事情,推荐直接在nvidia ngc中下载docker来进行部署。
事前准备:需要注册nvidia的ngc平台,在用户设置中获取到自己的key,该平台储存了nvidia预训练的模型和一些专用的docker image,比如deepstream sdk 和Transfer Learning Toolkit。
注册账号:官网地址https://ngc.nvidia.com/,注册后登录生成API Key(重要)https://ngc.nvidia.com/setup
然后在Generate API Key中点击Get API Key,点击右上角绿色按钮Generate API Key

1.1 安装docker和nvidia-docker2

apt-get update
apt-get install docker
apt-get install nvidia-docker2

1.2 登录nvidia的ngc平台下载deestream镜像

docker login nvcr.io

Username: $oauthtoken

Password:bjBsMHJucnFzOHY5dmw4YzFzMzNhbmFtcTc6ZDM5Y2RlODAtM2I0MS00Y2VmLWFmZTctMmFmYmZlZmI5MWRk

输入自己在平台获取到的Username和Password。如果未登录,在下载镜像时会出现验证错误的字样。

下载镜像并运行,使用docker images查看所有镜像,使用docker ps查看运行中的镜像
https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_docker_containers.html

docker拉取镜像。推荐早上5,6点的时候下载 docker pull
nvcr.io/nvidia/deepstream:5.0-dp-20.04-triton

#允许外部连接主机xhost +# 第一种镜像运行方法,使用-v来挂载需要导入镜像的目录,-p设置镜像接口,方便之后ssh登入。
docker run --gpus all --privileged=true -it -v /home/jdh/data:/root/host -p 5000:22 -m 2g -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-5.0 nvcr.io/nvidia/deepstream:5.0-dp-20.04-triton

#该命令可以输出显示图像
docker run --gpus all --privileged=true -it -v /tmp/.X11-unix:/tmp/.X11-unix -p 5000:22 -m 2g -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-5.0 nvcr.io/nvidia/deepstream:5.0-dp-20.04-triton

#第二种镜像运行方法,当执行推理出现内存空间不够时用
nvidia-docker run --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 --rm -it -v /tmp/.X11-unix:/tmp/.X11-unix -p 127.0.0.1:5000:22 -m 2g -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-5.0 nvcr.io/nvidia/deepstream:5.0-dp-20.04-triton

docker run --gpus all --net=host --privileged=true -it -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/jdh/data:/root/software -p 6000:22 -m 2g -e DISPLAY=$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE -w /opt/nvidia/deepstream/deepstream-5.0 nvcr.io/nvidia/deepstream:5.0-dp-20.04-triton

错误解决1

unknown flag: --gpus

docker版本要>19.03才支持gpu选择
在jetson_nano上配置docker注意事项
在docker中画面显示

#宿主机
$DISPLAY
#在docker容器中添加当前使用xshell的ip以及端口—只适合CPU显示
export DISPLAY=192.168.1.64:10.0

ps:docker --privileged=true 参数作用

  • 大约在0.6版,privileged被引入docker。
  • 使用该参数,container内的root拥有真正的root权限。
  • 否则,container内的root只是外部的一个普通用户权限。
  • privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
  • 甚至允许你在docker容器中启动docker容器。

$ docker help run

–privileged=false Give extended privileges to this container

这里以一个Mysql 例子
我们启动命令还没加 --privileged=true 参数 ,可以明确看到docker 尝试去运行容器,但是马上就关闭了。
命令

docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=123456 -p 9092:3306 -d daocloud.io/library/mysql:5.7.6

尝试使用一些命令,提示permission denied,权限禁止
在这里插入图片描述
加入参数命令后

docker run --name mysql-test --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -p 9092:3306 -d daocloud.io/library/mysql:5.7.6

在这里插入图片描述

成功运行命令

3.2 获取cuda10.2镜像(适合有opencv需求场景)

1.去dockerhub搜索自己需要的cuda等镜像,或者可以使用docker search查找镜像
2.拉去合适的镜像

sudo docker pull nvidia/cuda:10.1-cudnn7-devel-ubuntu16.04
sudo docker pull nvidia/cuda:10.2-cudnn8-devel-ubuntu18.04

3.创建容器
通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径
现在镜像内就可以共享宿主机里的文件了。
默认挂载的路径权限为读写。

#允许外部连接主机xhost +# 第一种镜像运行方法,使用-v来挂载需要导入镜像的目录,-p设置镜像接口,方便之后ssh登入。
#该命令可以输出显示图像
docker run --gpus all --net=host --privileged=true -it -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/jdh/disk_4t:/root/host_data -p 6000:22 -m 2g -e DISPLAY=$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE -w /root nvidia/cuda:10.2-cudnn8-devel-ubuntu18.04
docker run --gpus all --net=host --privileged=true -it -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/jdh/disk_4t:/root/host_data -p 60000:22 -m 2g -e DISPLAY=$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE -w /root nvidia/cuda:8.0-cudnn7-devel-ubuntu16.04

可能问题:
1.nvcc: command not found解决
添加环境变量,打开~/.bashrc ,添加环境变量如下:

export LD_LIBRARY_PATH=/usr/local/cuda/lib
export PATH=$PATH:/usr/local/cuda/bin

2.错误解决2

unknown flag: --gpus

docker版本要>19.03才支持gpu选择

3.在docker中画面显示

#在docker容器中添加当前使用xshell的ip以及端口
export DISPLAY=192.168.1.64:10.0

ps:docker --privileged=true 参数作用

  • 大约在0.6版,privileged被引入docker。
  • 使用该参数,container内的root拥有真正的root权限。
  • 否则,container内的root只是外部的一个普通用户权限。
  • privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
  • 甚至允许你在docker容器中启动docker容器。
 $ docker help run 
...
--privileged=false         Give extended privileges to this container
...

这里以一个Mysql 例子
我们启动命令还没加 --privileged=true 参数 ,可以明确看到docker 尝试去运行容器,但是马上就关闭了。
命令

docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=123456 -p 9092:3306  -d daocloud.io/library/mysql:5.7.6

尝试使用一些命令,提示permission denied,权限禁止
在这里插入图片描述
加入参数命令后

docker run --name mysql-test --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -p 9092:3306  -d daocloud.io/library/mysql:5.7.6

在这里插入图片描述
成功运行命令

3.3 docker ssh配置

3.3.1 运行容器

1、运行容器

docker run --name iubuntu -t -i -d -p 3316:22 ubuntu

参数:
–name: 指定生成的容器的名称
-i: 以交互模式运行容器,保证容器中STDIN是开启的。通常与 -t 同时使用;
-t: 为容器重新分配一个伪tty终端,通常与 -i 同时使用;
-d: 后台运行容器,并返回容器ID;
-p:可以指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器。支持的格式有 hostPort:containerPort、ip:hostPort:containerPort、 ip::containerPort。
ubuntu 则是镜像名称,镜像ID也可以的。

2、查看是否运行成功#
查看正在运行的镜像

docker ps

3.3.2 安装ssh服务
  1. 进入容器终端安装ssh服务

bash docker exec -t -i iubuntu /bin/bash

在这里插入图片描述

  1. 执行更新

apt-get update

等待,输入Y就可以了
在这里插入图片描述
3. 安装ssh-client、ssh-server
安装ssh-client命令#

apt-get install openssh-client

等待,输入Y就可以了
在这里插入图片描述
安装ssh-server命令#

apt-get install openssh-server

等待,输入Y就可以了
在这里插入图片描述
安装完成后,先启动服务

/etc/init.d/ssh start

在这里插入图片描述查看是否正确启动

ps -e|grep ssh

在这里插入图片描述

编辑sshd_config文件
需要先安装vim编辑器

apt-get install vim

在这里插入图片描述编辑sshd_config文件

vim /etc/ssh/sshd_config

在这里插入图片描述添加UsePAM no
在这里插入图片描述
保存退出 ESC + : + WQ
ps:如果无法进入端口可在宿主机查看端口是否被占用,更换端口

sudo netstat -ap | grep 6000

如果还不行,可以在docker中该文件下更改端口号为自己设置的端口号,也可以远程接入
在这里插入图片描述
重启ssh服务

service ssh restart

在这里插入图片描述
设置ssh密码

passwd root

在这里插入图片描述
查看容器的IP
先安装net-tools工具包

apt-get install net-tools

在这里插入图片描述查看IP

apt-get install net-tools
ifconfig

在这里插入图片描述退出

exit

4、保存刚刚修改的镜像,方便后面使用

docker commit [容器ID/容器名] [REPOSITORY:TAG]

3.3.3 使用Xshell连接

1、测试
打开一个新终端,通过ssh root@host_ip -p 3316 进入docker:
在这里插入图片描述

2、在本机连接可以用localhost:3316连接也可以用宿主机IP:3316连接,账户名为root
在这里插入图片描述

然后连接就可以了 #
在这里插入图片描述

ps:docker修改容器端口映射的方法
方法一
1、停止容器(docker stop d00254ce3af7)
2、停止docker服务(systemctl stop docker)
3、修改这个容器的hostconfig.json文件中的端口(原帖有人提到,如果config.v2.json里面也记录了端口,也要修改)
hostconfig.json文件
在这里插入图片描述

config.v2.json文件
在这里插入图片描述


                
内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰雪棋书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值