简介
上一篇文章演示了docker的常用命令,这篇说一下怎么进入docker容器内部
我们之所以要进入容器内部是因为我们有些操作需要进入容器进行修改
理论上我们可以直接把容器的根目录挂载出来到宿主机上,但是不推荐这样做,下面列了一些这样做的缺点
缺点 | 为什么危险 |
---|---|
会覆盖掉容器启动时的很多系统目录 | 容器的 /bin /lib /etc 本来来自镜像(只读层),现在会变成宿主机空目录 |
容器可能启动失败 | 启动时找不到必要文件:/bin/sh, /lib/ld-linux.so 等 |
文件系统混乱 | 容器里原本干净的文件系统和宿主机的实际文件混在一起 |
安全风险极大 | 容器里的进程可以读写宿主机上的所有数据,甚至覆盖宿主机关键文件 |
镜像更新、重建困难 | 挂载会覆盖镜像层,升级容器版本时会各种冲突 |
所以推荐的做法是挂载需要持久化的数据目录或者只挂载配置目录、日志目录,而不是全盘
进入容器命令
我们进入容器可以使用下面命令进入
docker exec -it 容器名称 /bin/bash
进入容器步骤1
首先我们需要查看容器是否运行,然后看一下容器的ID
docker ps
进入容器步骤2
上面我们给出的命令是docker exec -it 容器名称 /bin/bash
,但是并不是所有容器都适用,前面docker exec -it 容器名称
是固定的,但是后面的/bin/bash并不是所有容器都是这个,有的会是/bin/sh,有的甚至没有,有的路径也不是这个
bash和sh是什么呢,这两个就是linux用于交互的程序,没有这两个其中一个那就不能和linux交互
所以我们在进入容器前先查看容器是否又bash或者sh
docker exec 容器名称 which sh
docker exec 容器名称 whih bash
这两个命令会输出指定容器的sh或者bash的路径,如果看到有路径输出则该容器支持交互
进入容器步骤3
看到有输出路径了,我们就可以使用进入容器命令进入了
docker exec -it 容器名称 bash
这里可以发现这个命令和我上面的第一个命令不对,少了/bin/
,这是因为大多数容器是可以直接不用写完整路径,但是如果容器是非常精简的或者是PATH异常,那么使用这个是进入不了的,只能填写完整的bash路径或者是sh路径
当我们使用进入容器命令后,看到提示符显示的是容器ID即为已经进入容器
现在在里面你就可以像操作正常的linux一样操作了,使用ls,cd等命令了
如果容器是非常精简的,连yum,vi等常用工具都没有的,那么就只能把文件挂载出来进行编辑了