Window下编写的sh文件在Linux/Docker中无法使用
- 一、sh文件目的
-
- [1.1 初始状态](#1.1 初始状态)
- [1.2 目的](#1.2 目的)
- 二、过程与异常
-
- [2.1 首先获取标准ubuntu20.04 - 正常](#2.1 首先获取标准ubuntu20.04 - 正常)
- [2.2 启动ubuntu20.04容器 - 正常](#2.2 启动ubuntu20.04容器 - 正常)
- [2.3 执行windows下写的preInstall文件 - 报错](#2.3 执行windows下写的preInstall文件 - 报错)
- 三、检查和处理
-
- [3.1 评估异常](#3.1 评估异常)
- [3.2 处理异常](#3.2 处理异常)
- [3.3 调整后运行测试 - 正常](#3.3 调整后运行测试 - 正常)
- [3.4 sh运行完,检查docker容器 - 完成](#3.4 sh运行完,检查docker容器 - 完成)
- 四、小结
一、sh文件目的
1.1 初始状态
已经安装nvidia-docker
,docker
中创建容器测试nvidia-smi
正常
1.2 目的
制作Docker
镜像,将Python
环境【保存在文件python3_envs.txt
中】部署到Docker
镜像中,包括pytorch
、cuda
等环境
二、过程与异常
2.1 首先获取标准ubuntu20.04 - 正常
shell
sudo nvidia-docker pull ubuntu:20.04
2.2 启动ubuntu20.04容器 - 正常
shell
>>>sudo nvidia-docker run -it -d --name=demo --gpus=all -v /home/download:/root/download ubuntu:20.04 /bin/bash
55d0ded464ac82cab65befa54ec749fcff61a638ecf57a96f22aae3b95428b64
>>>sudo nvidia-docker attach demo
root@55d0ded464ac:/#
2.3 执行windows下写的preInstall文件 - 报错
shell
>>>root@55d0ded464ac:/#./preInstall.sh
sh preInstall.sh
: not foundsh: 2:
E: Invalid operation update
使用vim
在linux
下编辑preInstall.sh,未能解决问题。
三、检查和处理
3.1 评估异常
在windows下用notepad++打开preInstall.sh,如下图,评估可能是因为行尾和linux格式不一致【因为这个是常见问题】
3.2 处理异常
用notepad++执行行尾转换【状态栏操作,如小图】,将行尾转换为正常linux格式
3.3 调整后运行测试 - 正常
shell
>>>root@55d0ded464ac:/#./preInstall.sh
Hit:1 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
Get:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Hit:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Get:5 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [3895 kB]
Get:6 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1480 kB] Fetched 5489 kB in 9s (625 kB/s) Reading package lists... Done
......
3.4 sh运行完,检查docker容器 - 完成
>>>root@55d0ded464ac:/#python3
Python 3.8.10 (default, Nov 22 2023, 10:22:35)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
>>>
四、小结
在linux
下运行从其他操作系统编写的sh
文件时,需要检查文件行尾是否为linux
格式
好记性不如烂笔头。
站在岸上学不会游泳。
眼看千遍,不如手过一遍。
may the odds be ever in your favor ~