【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式

这篇具有很好参考价值的文章主要介绍了【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们知道,Docker相当于提供了一个 独立于宿主机的运行环境。当我们使用Docker部署了中间件例如nginx的容器后,一般都是需要修改配置文件的。那么我们想到的第一个方法就是进入容器去修改[1]。

1.进入容器内修改
首先我们需要有一个已经启动的容器。pull image后通过run-d -p --name启动可以得到一个后台启动的指定了暴露端口和名字的容器。
查看已启动的容器:

docker ps

如此会查看到容器的id【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式

进入容器内部:

docker exec -it 容器id /bin/bash

【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式
我们想要修改的nginx.cong文件就在nginx下,此时vim nginx.conf。你会发现vim命令找不到。因为docker容器类似于Linux的最小化安装,很多命令是没有的。需要我们去把vim装上。后面的我没有继续弄,装上vim后就可以去修改配置文件了,可以参考这篇文章[1]。

我个人觉得这种方式不是很合适,因为在容器内安装其他东西破坏了容器的纯净。进入容器后是root权限,也给破坏容器造成了一定的可能性。因此我赞同这篇文章[1]的观点,倾向于将配置文件挂载出来。

【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式

2. 挂载容器内的配置文件
对于挂载配置文件,我的理解是相当于Windows中的快捷方式。本来宿主机(Linux)是无法直接修改容器内的配置文件的。
而通过挂载的方式,在宿主机中有一个对应容器内配置文件的文件,修改宿主机中的文件,重启容器(没错,要重启才能看到配置文件的更新。一般来说配置文件这种东西都是要重启才能重新读取和生效),可以发现容器内的文件也对应的被修改了(vim用不了,可以用cat查看)。

挂载容器内的配置文件,共有2种方式[2],docker run -v在创建容器时挂载到主机目录和文件中或者挂载到数据卷中,Dockerfile在创建镜像时通过VOLUME 命令生成匿名卷[3],
需要说明的是,以后两种方式进行挂载的,是不能自己指定目录位置的,一般是docker会在安装目录下的指定目录下面生成一个目录来绑定容器的匿名卷(这个指定目录不同版本的docker会有所不同),我当前的目录为:/var/lib/docker/volumes/{容器ID}[3]。

2.1 docker run -v
docker run -v也细分为2种方式,创造数据卷、挂载到宿主机目录/文件中[5]。

2.1.1 创造具名的数据卷
姑且称之为创造数据卷。具体方式如下[5]:
创造一个数据卷

docker volume create mynginx

查看所有数据卷

docke volume ls

【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式

可以看到我们具名的数据卷mynginx创建成功,而上面随机数命名的数据卷,是一些匿名数据卷。
查看这个数据卷的信息:

docker volume inspect mynginx

可以看到数据卷的位置如红色方框中所示
【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式
使用这个数据卷挂载容器并运行:

docker run -d -p 8081:80  --name "nginx-volume-demo" -v mynginx:/etc/nginx/ nginx

可以看到容器正常启动了
【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式
那么挂载的数据卷中的文件和目录呢?我们需要cd到之前inspect后显示的目录中去。但是需要root权限。
【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式
可以看到,这样,我们nginx容器中/etc/nginx目录下的子目录和文件都挂载到了mynginx这个卷中。以后修改配置文件,直接inspect mynginx即可得到卷的路径。
关于volume的其他命令可以参考这篇文章[6]。

这种方式也是我个人觉得最好用的一种方式,简单高效。

如果在容器目录前没有指明要挂载的数据卷或者目录/文件,则docker会创造一个随机数命名的数据卷[7],所以我个人认为这种方式其实。
这种方式我没有自测,不过由于随机数实在是难以记忆,不如自己自定义一个好记点的名字的数据卷喽。

2.1.2 挂载到宿主机目录
挂载到宿主机目录,是将容器中的目录和文件挂载到我们自己指定的目录和文件中去。

这种方式需要我们先把需要挂载的文件复制到宿主机中。我们依然以nginx容器为例,我们的目的是将nginx容器中/etc/nginx/目录下的nginx.conf文件,挂载到宿主机中/home/xxx/Desctop/nginx目录下,则我们需要先把nginx.conf文件复制粘贴到宿主机中/home/xxx/Desctop/nginx目录中。nginx.conf文件的内容,不管你是去网上搜也好,起了一个nginx容器进去复制也好[1],都要找到一个完整正确的对应文件的内容,写入宿主机中你想要挂载目录下的对应文件中,文件名要和Docker中的一致。这是因为Docker容器在启动时,是以宿主机中的文件为主,如果宿主机中的文件不存在或者不正确,则挂载到宿主机中文件的容器无法正常启动。
注:如果目录不存在docker 会创建,但是文件不存在不可以。

docker run -v命令如下所示:

docker run -d -p 8081:80  --name "nginx-demo" -v /home/xxx/Desktop/MiddleWare/Docker/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:latest 

这种方式相比创造一个数据卷出来就麻烦了很多。个人不太推荐。

2.2 Dockerfile中的VOLUME命令
举例[8]:

VOLUME ["/data"] 

这种方式,是通过创造匿名(随机数命名)数据卷的方式挂载的,与2.1.1中介绍的不同在于,这个方式是在镜像构造阶段就完成了匿名挂载,因而相比2.1.1具有很好的可移植性[8]。

上面几种就是我目前了解的所有挂载目录和文件的方式,如有批评指正,欢迎评论。

参考文章:
[1],docker nginx 配置文件在哪?如何修改?如何挂载?
[2],Docker 实现挂载的三种方式
[3],一文说清楚Dockerfile 中VOLUME到底有什么用?
[4],docker学习笔记18:Dockerfile 指令 VOLUME 介绍
[5],docker数据卷(数据挂载)
[6],Docker - Docker Volume及Volume命令详解
[7],Docker容器数据卷详解
[8],Dockerfile(14) - VOLUME 指令详解文章来源地址https://www.toymoban.com/news/detail-473916.html

到了这里,关于【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker给已经启动容器添加挂载目录

    1.关闭docker 2. sudo su切换到root身份 cd /var/lib/docker/containers/容器id/,进入对应容器目录 3.vim hostconfig.json 修改如下,将容器目录/import绑定到主机/data目录: \\\"Binds\\\": [\\\"/data:/import\\\"], 4.vim config.v2.json 修改如下,添加MountPoints: 5.启动docker    systemctl start docker.socket  systemctl start docker.ser

    2024年02月11日
    浏览(45)
  • docker容器共享宿主机环境(目录挂载)

    一、背景介绍 如果开发的服务均需要将打成docker镜像,可是随着服务越来越多,镜像也越来越多。每次制作镜像的时候都需要将依赖打进容器,这样一个jre的环境就是100多M。有一天突发奇想,容器能不能共用宿主机的环境?这样每次打镜像时体积就会少不少。 二、测试 我们

    2024年02月09日
    浏览(62)
  • Docker -v 挂载主机目录到容器中(及数据卷容器)

    使用 Docker 的过程中,经常需要挂载主机上的目录或文件到 Docker 容器中,以实现数据的共享或持久化。而 docker run -v 命令便是用于挂载主机目录到 Docker 容器中的常用命令。 在创建启动容器时,使用 -v 参数设置数据卷 注意事项: 目录必须是绝对路径 如果目录不存在,会自

    2024年02月10日
    浏览(46)
  • 【Docker】在容器中管理数据&&数据卷挂载以及宿主机目录挂载

                                      🎉🎉欢迎来到我的CSDN主页!🎉🎉                         🏅我是平顶山大师,一个在CSDN分享笔记的博主。📚📚         🌟推荐给大家我的博客专栏《【Docker】在容器中管理数据》。🎯🎯                         🎁

    2024年01月16日
    浏览(50)
  • docker容器内修改配置文件

    1、进入容器内部 2、安装vim 1、替换配置文件 2、重启容器 时间报错参考

    2024年02月13日
    浏览(37)
  • docker容器修改挂载路径

    环境信息 虚拟机:appserver 新增参数说明 挂载宿主机docker-cli、docker.sock到Jenkins中 宿主机docker-cli路径/usr/bin/docker 宿主机docker.sock路径/var/run/docker.sock 修改前: 关键点 “Binds”:[“/appdata/jenkins:/var/jenkins_home”] 完整版 修改后: 关键点 “Binds”:[“/appdata/jenkins:/var/jenkins_home”,“

    2024年02月03日
    浏览(53)
  • 当docker中容器运行时,如何将目录和宿主机进行挂载

    容器已运行,但还想挂载文件 容器已经运行起来了,突然想给容器的目录进行挂载,通常是在运行容器时加上 -v  命令 进行挂载。运行起来的容器想挂载文件夹可以通过修改容器在宿主机的配置文件进行解决。 在配置文件中加入新的挂载 1.查看容器存放目录 2.进入该目录

    2024年01月25日
    浏览(51)
  • Oracle修改数据文件所在目录的挂载点小结

    如何修改Oracle数据库文件所在目录的挂载点名称。这里先简单介绍一下背景情况,这套数据库是刚搭建不久的一套Oracle 19c单机的UAT,数据库安装在/opt目录下,$ORACLE_HOME目录为/opt/oracle19c/product/19.3.0/db_1。由于前期挂盘,设置挂载点命名没有严格按规范操作,将数据文件和归档

    2024年01月25日
    浏览(39)
  • docker 容器修改端口和目录映射

    一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 这里是将容器内的80端口映射到宿主机的8088端口 参数说明 -d 表示后台运行容器 -t 为docker分配一个伪终端并绑定到容器的标准输入上

    2024年04月26日
    浏览(54)
  • 如何修改 docker 容器的目录映射

    创建容器时,指定了目录映射(-v) 如果容器运行之后发现目录映射需要改怎么办? 方法一 删除原有容器,重新创建新的容器 删除容器 docker rm -f 容器ID/名字 重新创建容器 docker run -d -p 9999:8080 -i --name tomcat7 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7 重新指定需要映射

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包