dockerstop容器(docker 容器操作)
本篇文章给大家谈谈dockerstop容器,以及docker 容器操作对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、dockerkill不掉
- 2、docker restart、start、stop与容器文件系统
- 3、docker修改conf配置重启容器配置没有了
- 4、docker容器运维命令有哪些
- 5、Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)
- 6、深入理解docker的镜像和容器
dockerkill不掉
docker删除不掉容器解决办法
删除不掉容器文件占用,其闷型实是网络问题。
解决办法如下
1、模肆docker stop 容器ID\容器名 先暂停
2、docker network disconnect --force bridge 容器旦罩轿ID\容器名 清除网络
3、docker rm -f 容器ID\容器名 再强制删除
docker restart、start、stop与容器文件系统
大概是在2016/10前后,我们部门使用docker一段时间后型亏偶尔会出现docker exec ... 无法进入容器的问题,环境为centos7.2、docker1.12.6,docker存储引擎为devicemapper,经过排查发现容器对应的文件系统已经umount,且发现开发同学用了大量的docker restart ... 操作。于是产生docker restart导致容器文件系统umount的疑问,后面对docker restart、start、stop三个命令与容器文件系统关系做了研究,以下是研究的记录。
通过docker run启动一个容器后,docker会同时挂载该容器的内存文件系统与容器的根文件系统(rootfs),比如
若容器的根文件系统(rootfs)umount,执行 docker exec -it xxx /bin/bash or /bin/sh会触发异常:
同时执行 docker restart xxx会触发异常:
分别查看docker restart、start、stop三个命令的debug信息,这里的实践环境为:centos7.2、docker1.12.6、存储引擎(storage-driver):devicemapper、镜像:nginx:1.12
通过上面的日志输出可以了解到
分析发现,docker restart命令并不是stop、start两个命令的顺序叠加,docker restart操作并不涉及容器文件系统的处理,开始怀疑的由于docker restart操作导致容器的文件系统处于umount状态此处没有找到证据,但为了保证容器的根文件系统与内轿租氏存系统mount的正确性,推荐对一个容器的重启使闭散用docker stop xxx 然后 docker start xxx,而非docker restart xxx。
[img]docker修改conf配置重启容器配置没有了
在Docker中,容器的配置和数据是分离的,因薯信此在修改配置文件后需要重新启动容器才能生效。如果您洞手塌修改了容器中的配置文件,但是重启容器后发现配置没有生效,可能是以下原因之一:
1. 容器中的配置文件不是您想要修改的文件:有些应用程序可能会从多个配置文件中读取配置,而您修改的可能不是正在使用的配置文件。您可以查看应用程序的文档或者配置文件来确定正确的配置文件位置。
2. 挂载配置文件的方式不正确:Docker可以通过挂载本地文件系统上的文件来替换容器中的文件。如果挂载的本地文件系统上的文件不是您想要使用的配置文件,或者挂载的路径不正确,那么容器中的配置文件将不会被替换。您可以通过检查`docker run`或`docker-compose`命令中的挂载路径是否正确来解决此问题。
3. Docker镜像缓存:Docker在构建容器时使用缓存,如果您在容器中增加了新的配置文件,但是没有更新Docker镜像,则容器使用的可能是旧的镜像,从而导致配置文件没有生效纳圆。您可以使用`docker-compose build --no-cache`命令来避免Docker镜像缓存的问题。
如果您已经确认修改了正确的配置文件,并且挂载路径也正确,那么您可以尝试使用以下步骤来解决问题:
1. 停止容器:`docker stop container_name`
2. 删除容器:`docker rm container_name`
3. 重新启动容器:`docker run --name container_name -v local_config_path:container_config_path image_name`
其中`local_config_path`是本地文件系统上的配置文件路径,`container_config_path`是容器中的配置文件路径,`container_name`是容器的名称,`image_name`是容器所使用的镜像名称。
通过这些步骤,您可以重新启动容器,并且使用新的配置文件。
docker容器运维命令有哪些
docker run -d --name alias-Name imageName //在后台启动一个容器
docker start Name/ID //启动容器
docker stop Name/ID //停止容器
docker restart Name/ID //重启容器
docker kill -s KILL Name/ID //杀死一个运行的容器
docker rm /rm -f Name/ID //删除容器
docker pause Name/ID //停止容器
docker unpause Name/ID //恢复容器
docker create --name CONTAINER_Name imageName //只创建容器但不启动
docker ps / docker ps -a //查看运行的容器
docker exec -it CONTAINER_ID /bin/bash //进行一个运行中的容器,开启一个新的终端
docker attach CONTAINER_ID //进行一个运行中的容器,不开启一个新的终端
docker inspect CONTAINER_Name //查看容器的相关信息
docker top CONTAINER_Name //查看容器里面的进程
docker events -f "image"="imageName" --since="1467302400" //时间戳=2016年姿好7月1日后的相关事件
docker logs CONTAINER_Name //查看容器的日志输出
docker wait CONTAINER_Name //阻塞运行直到容器停止,然后打印出它的退出代码
docker export -o test.tar CONTAINER_ID //将容器进行打包保存到本地,文件类型为tar
cat test.tar |docker import - image_name:tag //将上面保存的文件导入到镜像库中
docker port CONTAINER_ID //查看容器的端口映射情况
commit 从容器中创建一个新的链羡镜像
docker commit -a "tony test" -m "迹唤铅my mysql" CONTAINER_ID mymysql:v1
docker images mymysql:v1
cp 在使用的过程中会进行多个主机与容器之间的数据交换
docker cp /ruiqi/content CONTAINER_ID:/ruiqi/
diff 用来检查容器里面文件结构的更改
docker diff CONTAINER_ID
docker images /docker images -a //查看本地的镜像,-a 表示是所有的镜像
docker rmi -f image_name //删除镜像
docker tag mysql:v5.6 mysql:v5.7 //给镜像做一个有别名的复本
docker build -t runoob/ubuntu:v1 . //构建一个镜像
docker history image_name //查看当前这个镜像的 历史 信息
docker save -o TestFlask.tar TestFlask:v3 //将当前的镜像保存到本地的一个tar 类型的文件
docker login //登录镜像仓库
docker pull //从镜像仓库中拉镜像
docker push //向镜像仓库推本地的镜像文件
docker search //检索镜像内容
Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)
摘要: Docker
容器是一个精简版的操作系统,一般一个容器只运行一个应用,容器通过镜像创建,使用 docker run 命令创建,容器起到了 隔离 作用,容器和容器之间独享空间和网络等
容器的基本操作包括创建(启动),停止,重启,查看,检查等,容器通过镜像创建,使用 docker run 命令创建,需要指定run参数,镜像名,容器执行命令,语句格式如下
在实际使用中启动一个镜像,例如
-e 设置环境变量,格式是 -e k1=v1 -e k2=v2 ,使得在docker镜像中的程序能够直接访问到环境变量,同时可以作为配置参数放在docker run启动镜像的时候设置,而不是写死在dockerfile在build的过程中,-e和dockerfile中的 ENV 变量作用相同,当变量重名时-e替换ENV,下面测试一些做带-e参数,在Dockerfile指定环境变量
直接构建成容器
开启一个终端启动容器内部,打告御印指定的环境变量a
此时在run指令中增加-e设置环境变量,可见-e替换了Dockerfile中指定的环境变量
因为一个镜像可以启动多个容器,所以可以通过设置不同-e达到设置不同配置参数的目的,比如下一个例子在Dockerfile中设置和将环境变量写入yaml文件再供Python调用,执行的内容为打印yaml配置文件的参数内容,比如下面这个例子先看下目录结构
其中config.yml是一个空配置文件,在run.sh中先使用echo写入追加配置参数到config.yml在执行Python脚本
Dockerfile中启动run.sh脚本作为容器执行命令
在启动容器时,使用-e指定环境变量,在run.sh中echo将环境变量拿到和写入配置文件,测试多次以不同的配置参数启动容器如下
-v 设置挂载运行,将宿主机当前目录下的文件挂载到容器中/home目录下,例如
如果挂载的目录和Dockerfile中的COPY的目录不一致, -v会替代COPY或者ADD ,例如现在Docker中COPY一个文件到容器/home目录下
同目录下start.sh内容是打印1
构建镜像结束后,指定-v启动,起始挂载另外一个目录,目录下start.sh内容是打印2
docker run参数中最后的COMMAND会覆盖Dockerfile中指定的 CMD ,例如执行echo 2替换原始Dockerfile中的CMD echo 1,输出结果是2且执行完毕后退出
对于Dockerfile中的 ENTRYPOINT 指定的启动命令docker run的COMMAND不会覆盖,如果要覆盖Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 参数,格式是
测试一个Dockerfile输出1
在docker run中使用--entrypoint覆盖Dockerfile中的ENTRYPOINT
容器启动后通过 docker ps 或者 docker container ls 查看容器,可以增加额外参数比如 -a 显示所有容器,默认只显示运行的容器,可以增加 --no-trunc 参数使得显示结果不截断,例如
显示结果分别显示了容器的ID,镜像,执行命令,创建时间,状态,端口映射(宿主机-容器)和容器名称。对于已经运行的容器可以使用 docker stop 停止,如果在docker run时增加--rm参数则停止的容器保留不会自动删除,例如
除了docker stop命令还有一种停止容器纯友芦的命令 docker kill ,相比于docker stop,docker kill是 强制立即停止 ,而docker stop是先给了容器10秒(默认)的时间,使得容器有一定的时间处理、保存程序执行现场, 优雅的退出程序 ,例如
在容器停止之后可以使用 docker start 再启动一个停止的容器,例如
除此之外可以使用 docker restart ,此时容器可以使停止的也可以是在运行中的,例如
查看容器详情使用 docker inspect ,比如
在以上截取的内容中展示了容器详情,包括容器id,创建时间,执行命令和参数,执行状态,容器pid,落脚点,环境变量,网络设置,端口映射等,也可以使用Go语言风格输出指定的详情,比如分别只看容器的pid和容器的执行命令
容器是一个操作系统,可以进入这个操作系统查看容器的运行情况,有多种方式进入容器,其中主要是使用 docker exec 进入容器,在一个运行中的容器中执行一个命令,使用 -it 并带有 /bin/bash 命令就可以进入容器,比如
除了/bin/bash也可以是其他命令挂载exec后面则可以直接对一个运行中的容器执行命令,比如查看容器的进入落脚点路径,容器中的内存情况
当容器以后台 -d 运行时,日志运行在容器内部,可以进入容器内部查看日志,也可以使用 docker logs 查看日志,以一个flask api接口的容器为例,日志写入文件,同时也会输出在flask的控制台
创建Dockerfile以及构建镜像,启动容器
启动一个脚本不断请求api接口
进入容器内部查看日志
另一种方式是直接使用 docker logs 命令,比如使用 -f 追踪输出,并且从最后的第1行开始输出
此时宿主机的logs目录下为空,容器中的logs目录下存在detail.log文件,如果使用 -v 将宿主机目录挂载到容器作为容器写入的目录,则容器中数据的变动会同步到本地,这样可以直接在本地查看日志,修改容器启动为 -v 挂载的形式
此时本地logs目录下开始产生日志,且这个日志和容器内的logs目录下一致
如果容器内的内容改变了,此时删除容器从镜像重新启动容器则改动的内容将不会存在,如果相对修改过的容器保留下来则可以从容器生成新的镜像,先测试以下容器内修改在删除的容器后将不再生效,在已有容器中使用pip安装Python包
此时退出容器,并且删除容器,最后从镜像重新生成容器
此时进入容器检查,并不存在pymongo包
如果要容器变化保存下来需要以这个新容器生成一个镜像,使用 docker commit ,语法如下
以新安装pymongo的容器为例,对新容器使用docker commmit
新生成的镜像叫做xiaogp/my_image_test:v2
从新镜像启动容器并进入容器查看存在新安装的pymongo
深入理解docker的镜像和容器
镜像(Image)就是一推只读层Image(read-only layer)的统一视觉,也许这些定义有些难理解,下面这张图能够帮助读者理解镜像的定义
从左边往右我们看到了多个只读层,他们重叠在一起,除了最下面一层,其他层都会有一个指针指向下一层,这些层是docker内部的实现细节,并且能够在主机(运行docker的机器)的文件中访问到,统一文件系统技术(union file system)能够将不同层合成一个文件系统,为这些层提供一个统一的视觉,这样就隐藏了多层的存在,在用户的角度来看,只存在一个文件系统。我们可以在图片右边看到这个视角的形式埋握誉。
你可以在你的主机文件系统上找到有关这些层的文件,在一个运行中的容器内部,这些层是不可见的。在我的主机上,我发现他们存在于/var/lib/docker/image目录下
容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视觉,唯一区别在于容器的最上面那一层是可读可写的
要点: 容器 = 镜像 + 读写层
Running Container Definition
一个运行态容器(runing container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程。下面这张图展示一个运行中的容器
我们可以通过以下命令验证我们所说
find / -name happiness.txt
为了将零星的数据整合起来,我们提出了镜像层(image layer)这个概念,下面这张图描述了一个镜像层,通过图片,我们能够发现一个层并不仅仅包含文件的改变,他还弯段包含其他重要的信息
元数据(metadata)就是关于这个层的额外信息,它不仅仅能够让Docker获取运行和构建时的信息,还包括父层的层次信息,需要注意的是,只读层和读写层都包含元数据。
/var/lib/docker/image/overlay2:存储镜像管理数据的目录
一个容器的元数据好像被分成了很多文件,但或多或少能够在/var/lib/docker/containers/id 目录下找到,id 就是一个可读层的id,这个目录下的文件大多是运行时数据,比如说网络,日志等等。
现在,让我们结合上面提到的实现细节来理解Docker命令
docker create 命令就是为指定的镜像(image)添加一个可读写层,构成一个新的容器,注意这个容器并没有运行起来
docker start 命令为容器文件系统创建一个进程隔离空间。注意,每一个容器只能够有皮并一个进程隔离空间
看到这个命令,通常有读者会由一个疑问:docker start 和docker run 命令有什么区别。
docker run 命令是利用镜像创建一个容器,然后运行这个容器,这个命令非常方便,并且隐藏了两个命令的细节。
docker ps 命令会列出所有运行中的容器。这隐藏了非运行态容器的存在,如果想要找出这些容器,我们需要使用下面这个命令。
docker ps –a命令会列出所有的容器,不管是运行的,还是停止的。
docker images命令会列出了所有顶层(top-level)镜像。实际上,在这里我们没有办法区分一个镜像和一个只读层,所以我们提出了top-level镜像。只有创建容器时使用的镜像或者是直接pull下来的镜像能被称为顶层(top-level)镜像,并且每一个顶层镜像下面都隐藏了多个镜像层。
docker images –a命令列出了所有的镜像,也可以说是列出了所有的可读层。如果你想要查看某一个image-id下的所有层,可以使用docker history来查看。
docker stop命令会向运行中的容器发送一个SIGTERM的信号,然后停止所有的进程。
docker kill 命令向所有运行在容器中的进程发送了一个不友好的SIGKILL信号。
docker stop和docker kill命令会发送UNIX的信号给运行中的进程,docker pause命令则不一样,它利用了cgroups的特性将运行中的进程空间暂停但是这种方式的不足之处在于发送一个SIGTSTP信号对于进程来说不够简单易懂,以至于不能够让所有进程暂停。
docker rm命令会移除构成容器的可读写层。注意,这个命令只能对非运行态容器执行。
docker rmi 命令会移除构成镜像的一个只读层。你只能够使用docker rmi来移除最顶层(top level layer)(也可以说是镜像),你也可以使用-f参数来强制删除中间的只读层。
docker commit命令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。
docker build命令非常有趣,它会反复的执行多个命令。
我们从上图可以看到,build命令根据Dockerfile文件中的FROM指令获取到镜像,然后重复地1)run(create和start)、2)修改、3)commit。在循环中的每一步都会生成一个新的层,因此许多新的层会被创建。
docker exec 命令会在运行中的容器执行一个新进程。
docker inspect命令会提取出容器或者镜像最顶层的元数据。
docker save命令会创建一个镜像的压缩文件,这个文件能够在另外一个主机的Docker上使用。和export命令不同,这个命令为每一个层都保存了它们的元数据。这个命令只能对镜像生效。
docker export命令创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容(译者注:expoxt后的容器再import到Docker中,通过docker images –tree命令只能看到一个镜像;而save后的镜像则不同,它能够看到这个镜像的历史镜像)。
docker history命令递归地输出指定镜像的历史镜像。
关于dockerstop容器和docker 容器操作的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。