如题,想要配置服务器的python编译器环境,来查看容器内部环境安装的包的情况。
首先,需要确定容器的状态,使用docker ps 查看,只有ports那一栏有内容才证明容器暴露了端口出来。如果没有暴露,就需要将容器打包成镜像,然后将镜像再启动一个容器才可以。步骤如下:
如何打包镜像:(里面包括了将镜像从A服务器远程传输到B服务器后使用的方法,如果是在本服务器自己使用,那么忽略远程传输的步骤)
# 创建一个基于当前容器状态的新镜像,以便可以分发或重新使用。
docker commit my_container my_new_image
# docker commit:此命令用于将容器的当前文件系统更改保存为新的镜像。
# my_container:要提交的容器的名称或 ID。
# my_new_image:新镜像的名称。
docker images
# 命令列出了当前系统中的所有镜像,包括你刚刚创建的新镜像,用于查看imagesID。
# 将镜像保存为一个可移植的压缩文件,便于传输和分发。
docker save d0f2ae8beba3 | pigz > msit_t63_4g.tgz
# docker save d0f2ae8beba3:将指定镜像(由 ID d0f2ae8beba3 标识)保存为 tar 存档。
# | pigz:通过管道将 tar 存档传递给 pigz 工具进行压缩。
# > msit_t63_4g.tgz:将压缩后的输出保存为 msit_t63_4g.tgz 文件。
# 这一步会等待一两分钟
# 将压缩的镜像文件从当前机器传输到远程机器 71.14.88.29 的指定目录。
scp xxx.tgz [email protected]:/home/q00885284
# scp:安全复制协议,用于在本地主机和远程主机之间.copy文件。
# xxx.tgz:要传输的文件名。
# [email protected]:/home/q00885284:远程主机的用户名、IP 地址和目标目录。
# 这一步会让你输入密码
# 在远程机器上恢复镜像,使其可用于创建容器。
docker load -i xxx.tgz
# docker load:加载一个镜像存档到 Docker 镜像库。
# -i xxx.tgz:指定要加载的镜像文件。
#因为当时压缩时候没有标签,所以这一步要查看新的镜像并重新打回标签
docker images
#给没有名字和标签的镜像重新命名
docker tag :
# image_id 你查出来的镜像id;new_repository:镜像名字;new_tag:标签名,例如latest,v1.0等
然后重新run一个容器(注意要去掉--network=host参数,要加上-p 8080:22参数,这样就可以让容器暴露一个端口出来)
需要替换的内容:--name 后面的 “my_container”是容器名称,自己替换
最后一行的 123456789ad ,实际是镜像的id,通过docker images 命令可以查到,替换掉
docker run --name my_container -it -d --shm-size=500g \
--privileged=true \
-w /home \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--entrypoint=bash \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/sbin:/usr/local/sbin \
-v /home:/home \
-v /data:/data \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
-p 8080:22 \
123456789ad
创建好容器之后,就按照如下两个网站一步一步走即可(注意主要参考第一个网站)
blog.csdn.net
blog.csdn.net
ps1:如果里面的passwd命令没发现,需要
apt update && apt install -y passwd
或者
yum install -y passwd
ps2:如果服务器是yum命令的操作系统(即上述攻略中的操作不起作用),那么ssh启动服务步骤如下:
#寻找sshd服务位置
whereis sshd
#终端输出:sshd: /usr/sbin/sshd
开启ssh服务:
/usr/sbin/sshd
#终端输出:
/etc/ssh/sshd_config line 139: Deprecated option RSAAuthentication
Unable to load host key: /etc/ssh/ssh_host_rsa_key
Unable to load host key: /etc/ssh/ssh_host_ecdsa_key
Unable to load host key: /etc/ssh/ssh_host_ed25519_key
#上述输出表示,SSH 服务无法启动的原因是缺少主机密钥文件(host keys)。SSH 服务需要这些密钥文件来加密通信,如果它们不存在,服务将无法启动。
#解决方案如下
---
### 1. **生成 SSH 主机密钥**
SSH 主机密钥文件通常位于 `/etc/ssh/` 目录下,包括:
- `/etc/ssh/ssh_host_rsa_key`
- `/etc/ssh/ssh_host_ecdsa_key`
- `/etc/ssh/ssh_host_ed25519_key`
你可以使用以下命令生成这些密钥文件:
```bash
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
```
---
### 2. **检查密钥文件的权限**
确保生成的密钥文件具有正确的权限:
```bash
chmod 600 /etc/ssh/ssh_host_*_key
chmod 644 /etc/ssh/ssh_host_*_key.pub
```
---
### 3. **修复配置文件中的过时选项**
错误信息中提到 `/etc/ssh/sshd_config line 139: Deprecated option RSAAuthentication`,说明配置文件中有一个过时的选项 `RSAAuthentication`。
打开配置文件:
```bash
vi /etc/ssh/sshd_config
```
找到第 139 行,删除或注释掉 `RSAAuthentication` 选项:
```bash
# RSAAuthentication yes
```
保存并退出。
---
### 4. **重新启动 SSH 服务**
生成密钥文件并修复配置文件后,尝试重新启动 SSH 服务:
```bash
/usr/sbin/sshd
```
---
### 5. **检查 SSH 服务是否运行**
使用以下命令检查 SSH 服务是否正在运行:
```bash
ps aux | grep sshd
```
如果看到 `/usr/sbin/sshd` 进程,说明 SSH 服务已成功启动。
---
上述解决过程具体在终端中的输入和输出如下(供参考):
[root@afaa384fd67d home]# /usr/sbin/sshd
/etc/ssh/sshd_config line 139: Deprecated option RSAAuthentication
Unable to load host key: /etc/ssh/ssh_host_rsa_key
Unable to load host key: /etc/ssh/ssh_host_ecdsa_key
Unable to load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.
[root@afaa384fd67d home]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
Generating public/private rsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_rsa_key
Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub
The key fingerprint is:
SHA256:3eWKzdd05BeKz3I1ShTrC+j6Viem3Eb7L7iuzCOzr3U root@afaa384fd67d
The key's randomart image is:
+---[RSA 3072]----+
| . |
| o |
| o...|
| ...+o.o.|
| S..o.+.o=|
| . O=o+o+|
| .oBEO*. .|
| o==.=oo |
| +O*=oo.o. |
+----[SHA256]-----+
Generating public/private ecdsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_ecdsa_key
Your public key has been saved in /etc/ssh/ssh_host_ecdsa_key.pub
The key fingerprint is:
SHA256:yChURNODeY16W/jEdVny+9Eq9L3UAZJYgjXE0i8n21o root@afaa384fd67d
The key's randomart image is:
+---[ECDSA 256]---+
| o=+ o*= ..o. |
| .o.=o.o* +o |
| . o +.o.+ .. |
| . .oo.+o o. ...|
| . ..o=S * . .o.|
| . . .. E . ++|
| o . o.+|
| . .. .|
| . |
+----[SHA256]-----+
Generating public/private ed25519 key pair.
Your identification has been saved in /etc/ssh/ssh_host_ed25519_key
Your public key has been saved in /etc/ssh/ssh_host_ed25519_key.pub
The key fingerprint is:
SHA256:42YoLnW+/IRsKaVPiz/oMF1OU6geenJtJnrAFl+f/Cs root@afaa384fd67d
The key's randomart image is:
+--[ED25519 256]--+
| |
| . |
| . . |
| . ... |
| . oo.=oS. |
| ++oX.*+. |
| .=oX+% =. |
| .Oo%o=E . |
| .++.*+.... |
+----[SHA256]-----+
[root@afaa384fd67d home]# chmod 600 /etc/ssh/ssh_host_*_key
chmod 644 /etc/ssh/ssh_host_*_key.pub
[root@afaa384fd67d home]# vi /etc/ssh/sshd_config
[root@afaa384fd67d home]# /usr/sbin/sshd
[root@afaa384fd67d home]# ps aux | grep sshd
root 288 0.0 0.0 16188 1220 ? Ss 17:46 0:00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups
root 290 0.0 0.0 3040 1212 pts/1 S+ 17:46 0:00 grep --color=auto sshd
前述创建ssh连接时候有一步是填mapping地址的,建议将本地一个准备好的空文件夹与ssh远程的项目目录文件夹对应。然后点击上图中的Download会自动将ssh远程目录文件下载到本地,上传应该是反过来的。
不要把数据集、权重之类的数据文件夹放到pycharm工作目录里面,不然对比更新特别费劲。
以上操作完成后,远程可以连接到docker内部了