前言
由于公司部署环境问题,需要在无网络环境下安装 Docker ,并运行容器
由于平时都只是在有网络的情况下,直接 yum install 就可以了
拉取镜像也可以直接从 Dokcer 镜像仓库 拉取,速度慢的话也可以选择从 阿里云镜像仓库 拉取
此次离线安装遇到了一些问题,因此记录我踩坑的记录
安装 Docker
-
从 Docker 官方 下载你想要的 Docker 版本,我下载的图中
19.03.8的版本 -
解压
Docker包把
docker解压,解压的路径随意,我就在我的home目录下解压的tar xzvf /path/docker-19.03.8.tgz /path/ -
将
Docker包下的指令复制到/usr/bin目录下,把docker命令在加载到环境变量中,让docker在所有目录下都可以直接执行命令,而不至于加上执行文件路径。简单来说不执行该步骤的话,在执行docker命令时,需要加上路径如/path/docker run ...sudo cp docker/* /usr/bin/ -
启动
Dockersudo dockerd & // & 表示让 docker 在后台运行 -
验证
docker是否安装成功这时查看
docker镜像时发现没有镜像,我提前打包了一个nginx镜像,通过docker save -o nginx.tar nginx命令打包的使用
docker load < nginx.tar加载镜像,这时你的docker里面就会有nginx镜像了使用
docker run -d --name nginx -p 80:80 nginx启动容器,成功启动就说明安装成功了
遇到的异常
-
使用
docker启动容器时,出现错误Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused "write /proc/self/attr/keycreate: permission denied"
看信息是
/proc/self/attr/keycreate没有写权限造成的,然后查找探究解决方案方案一(不推荐)
把
/etc/selinux/config里面的SELINUX设为disabled,保存重启系统方案二(推荐)
直接执行命令
setenfore 0,切换运行模式setenfore 0探索
为了看
SELinux是什么,我又深入探索了一下,了解到SELinux是一个 Linux 内核模块,也是 Linux 的一个安全子系统。我看了之后发现
SELINUX的结构及配置十分复杂,短时间不是能够弄明白,但我大致了解到seliunx是一对控制进程访问权限的东西,即使使用root运行某个服务进程,此进程也不能像root用户一样访问系统上的所有文件我觉得这应该是一个十分重要的功能,如果直接
disabled的话,有可能会造成某些安全问题,最好不要在生产环境下使用简短的探索之后,我发现可以把
SELinux的工作模式设为Permissive(宽容模式),在此模式下,SELinux会有产生警告信息并记录日志,不会实际限制文件的读写。可以方便以后的 debug 用 。可以直接使用
setenfore 0命令是动态切换SELinux的工作模式,只能在Enforcing(严格模式)和Permissive两种模式之间切换,不能直接disabled,且当此有效,系统重启后恢复Enforcing(严格模式)应该有完美的解决 方案三 的,由于太菜,还弄不明白
SELinux的配置,目前只能使用方案二切换成Permissive,后面有时间再去研究一下SELinux