`

docker学习笔记:修改无法启动的容器中的内容

 
阅读更多

原文链接:https://www.cnblogs.com/51kata/p/5276407.html

我们可能会碰到这样的一个问题,在容器执行过程中,修改了容器的内容(如配置文件信息),但因为修改出了问题。导致容器关闭后,无法启动。

这事需要重新修改配置文件。 正常情况下可以通过 docker exec命令打开容器的一个shell终端进去修改。

但这时容器已经无法启动了。这时该如何处理呢? 这有两种方案:

方案一:创建新镜像

把这个问题容器用docker commit提交到一个新的镜像,然后用docker run -it 基于新镜像运行一个新的容器进去改变(修复)配置文件。

再通过新的容器再提交一个新的镜像,然后在基于新的镜像重新启动容器(同最初的容器)。

这个方法是可行的,但问题是步骤多,而且提交了新的镜像,对于后续维护增加了复杂性。

 

方案二:直接修改容器的文件

所有的容器数据都存在/var/lib/docker/aufs/diff/路径下。比如:

复制代码
root@ubuntu:~# ls /var/lib/docker/aufs/diff/ -l
total 176
drwxr-xr-x  2 root root 4096 Mar  6 05:13 040bf8e0842564e26e62f3e3a30785bd9651c82c52ed99115cd5360ce979e680
drwxr-xr-x  6 root root 4096 Mar  6 05:13 04f7e78a2c8ac9664503f4ea5a1d94bf27b94620987f241cfb9fd6631f761113
drwxr-xr-x  2 root root 4096 Mar 11 01:07 0c666375883f81ba0fc3962368766e93710f59c072a4b80cdf5640323018ccdb
drwxr-xr-x  4 root root 4096 Mar 11 07:53 0d7fc1722e459b242140ec45faec754d4967d72ea2ddf321f8606c837f8e8d4f
drwxr-xr-x  6 root root 4096 Mar 11 07:53 0d7fc1722e459b242140ec45faec754d4967d72ea2ddf321f8606c837f8e8d4f-init
drwxr-xr-x  3 root root 4096 Mar  6 05:13 0dc5e226a795507723362cc16046cf16650f8f70dc7bb721b799a5f2a40512ce
drwxr-xr-x  2 root root 4096 Mar  6 05:13 0fd3b6e125673affc1f348cdb0c071782bde7d7ab4748bea3e30bc2d1d7ea7ab
......................
复制代码

一个容器的数据对应这其中的一个或多个目录 。其中目录名的前几位就是容器的ID,通过这知道容器和目录的对应关系。
注意这个目录需要用root用户执行。

具体的操作步骤如下:

1、设置当前目录  cd /var/lib/docker/aufs/diff/

2、查找要修改的配置文件所在容器中的位置

find ./ -name 'nginx.conf'

假设我们要修改的是 nginx.conf文件,可能的结果如:

./eb531927ba243b59f0db78848809423f7debe148a9ef972088ea41be73c2aa81/etc/nginx/nginx.conf
./4975acfb30f3f729ac08a9c1bd642f735298a47057fc7c414c7479696b80f36a/etc/nginx/nginx.conf
./6fce3cb01e3c9b8cc4e1fc270c012b1d0b666fe49ad8b6bededb99e295c5da4c/etc/nginx/nginx.conf

这时我们通过比较要修改容器的ID 与上面几个目录的前缀,就知道是要修改哪个配置文件了。

如果我们进入类似 4975acfb30f3f729ac08a9c1bd642f735298a47057fc7c414c7479696b80f36a 目录,会发现这个目录下的内容和linux跟目录下的目录结构非常类似。我们可以找到相关的配置文件直接修改。

说明:因为一个容器的文件系统包括不可修改的镜像层和可修改的读写层,这个目录下其实就是读写层的内容。

3、修改完毕后用 docker start 容器名/ID  即可重新启动容器。

分享到:
评论

相关推荐

    B站整理的乐优商城笔记

    我们还学习了如何使用`docker exec`命令进入容器中并安装Vim编辑器。 2. 序列化和反序列化: 在本节中,我们学习了如何将集合转换成JSON,并将JSON反序列化成集合。在Java语言中,我们可以使用Jackson库来实现序列...

    linux系统学习笔记和资料

    Linux系统学习笔记和资料主要涵盖了Linux操作系统的基本概念、安装、常用命令、系统管理以及更深入的编程和服务器配置等内容。Linux是一种开源的操作系统,广泛应用于服务器、云计算、嵌入式设备等多个领域。以下是...

    linux运维手册学习笔记

    ### Linux运维手册学习笔记知识点概览 #### 一、Linux快速入门 **1.1 为什么要学习Linux** - **行业需求:** 在IT行业中,尤其是服务器领域,Linux因其开源、稳定、安全等特性被广泛使用。 - **技能提升:** 掌握...

    Spring Microservices_Build Scalable Microservices with Spring,Docker, and Mesos

    - **容器化**: Docker提供了一种将应用程序及其依赖打包到容器中的方法,确保应用在任何环境中都能一致地运行。 - **轻量级隔离**: 容器之间的隔离程度很高,但相比虚拟机更轻量,启动速度快。 - **可移植性**: ...

    4-27Clara Train SDK的环境配置+训练流程s1

    在Docker容器中,可以找到展示SDK功能的多个笔记本,包括性能提升、自动机器学习的超参数优化、联合学习和特定领域的示例。 3. **功能探索**:每个笔记本都专注于特定的功能点,帮助用户逐步了解和利用SDK的能力。...

    K8s(Kubernetes)架构培训笔记.pdf

    Pod可以理解为Docker单机环境,每个Pod中包含一到多个容器,总是被启动在一个结点;一个Pod的容器在Kubernetes集群中有相同的地址和端口范围,即容器暴露于Kubernetes集群的端口号不可重复。 Kubernetes高可用部署 ...

    ywh-frame:ywh个人学习开发框架

    搭建笔记:技术栈springboot数据连接池 Druid使用MyBatisPlus作为持久层集成Redis实现SpringSecurity作为安全框架管理账户整合vue2.x作为前端技术使用容器Docker部署Nginx环境JDK1.8mysql8.0,5.7应该也可以,如果不...

    linux架构师成长笔记

    Linux架构师成长笔记介绍了Linux领域中的虚拟化技术,这是Linux系统管理和架构设计中的一个重要主题。在虚拟化技术中,我们可以根据资源的不同进行分类,包括平台虚拟化和操作系统虚拟化。 首先,平台虚拟化是指在...

    笔记24-JAVAEE之Linux和云服务器

    在JAVAEE开发中,了解和掌握Linux操作系统以及云服务器的使用是至关重要的。Linux作为一款稳定、开源的操作系统,常被用作服务器...同时,不断学习新的技术和工具,如容器化、自动化运维,将使你在IT行业中更具竞争力。

    k8s-51cto-kubeadm部署k8s1.13.0-笔记总结

    安装Docker并设置为开机启动,确保Docker守护进程可以在非root用户下运行,这通常是通过修改`/etc/docker/daemon.json`文件实现的。 **三、kubeadm初始化** 在主节点上执行kubeadm初始化命令,这会创建必要的...

    jenkins安装文件及教程

    Jenkins是一款广泛使用的持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment...通过学习和实践这些内容,可以有效地在Linux环境中部署和管理Jenkins,实现高效且安全的持续集成和持续部署流程。

    linux笔记_运维

    在Linux运维中,掌握基本的命令是至...23. `docker`容器技术,`Jenkins`持续集成,`ELK`日志收集分析(Elasticsearch、Logstash、Kibana)。 以上只是Linux运维中的冰山一角,深入学习还需要结合实际操作和不断实践。

    notebooker:我想看Jupyter笔记本

    9. **Docker化**:Jupyter Notebook可以打包到Docker容器中,便于在不同环境中部署和运行,保持一致性。 10. **扩展与自定义**:通过JupyterLab,用户可以自定义工作区布局,增加插件,提升工作效率。 描述中的...

    NoteApp_Note_Command_Service

    项目可能通过Docker打包成容器,便于在各种环境中一致性地运行。 总的来说,NoteApp_Note_Command_Service项目展示了Rust在构建命令式服务方面的应用,强调了安全性、性能和模块化设计。通过理解和学习这个项目,...

    03 源码框架专题04.zip

    5. **集成第三方技术**:在"Spring Boot快速集成第三方技术详解"中,你可能会学到如何集成如MyBatis、Hibernate等ORM框架,Redis或Memcached作为缓存,Elasticsearch进行搜索,Docker容器化部署,以及Spring Cloud...

    pulsar-playground:用于Pulsar核心开发的游乐场,其中包含在笔记本电脑上设置k8s测试环境的说明

    3. **测试和调试**:对于开发新功能或修复问题,Pulsar Playground提供了直接与服务交互的便利,可以快速验证代码更改的效果。 4. **学习和演示**:对于新接触Pulsar的开发者,这是一个了解系统工作原理和实践操作...

    CIS-106-:这是我Linux课程学期SP21的仓库

    描述中的内容与标题基本一致,进一步确认这是一个与Linux学习相关的资料仓库,可能包含了课件、练习、项目或笔记等学习资源。然而,由于没有具体的描述,我们只能推测这个仓库的内容。 虽然没有标签提供额外信息,...

    lectures-2021

    标题“lectures-2021”暗示了这是一个关于2021年某课程或研讨会的资料集合,可能包含了该年度的教学内容、笔记或者演示文稿。由于标签为“JupyterNotebook”,我们可以推断这些材料主要是围绕使用Jupyter Notebook...

    lab

    10. **Docker化部署**:通过Docker将Jupyter Notebook部署到容器中,以实现更安全、可移植的工作环境。 在"lab"环境中,用户可以系统地学习和实践这些知识,逐步提升自己在数据分析和编程方面的技能。通过运行和...

Global site tag (gtag.js) - Google Analytics