关于 docker 挂载文件夹的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
VECH
V2EX    Linux

关于 docker 挂载文件夹的问题

  •  
  •   VECH 2019-02-04 19:01:23 +08:00 10260 次点击
    这是一个创建于 2447 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目的:将容器内的文件夹挂载到容器外,以便直接编辑容器内文件的方法。
    原因:本人在 debian 9.7 上使用 docker 下载 nginx 官方镜像并创建了一个 nginx 容器。创建容器时,为了方便修改 nginx 配置文件,将宿主机的一个空文件夹“/etc/nginx ”,挂载为容器中 nginx 的配置文件夹,创建容器的命令中指定了如下参数“-v /etc/nginx:/etc/nginx ”。结果容器无法启动,排查后发现宿主机 “/etc/nginx ” 配置文件夹是空的,导致 nginx 无法启动,容器退出。原因可能是“-v /etc/nginx:/etc/nginx ”参数挂载目录只是将宿主机的文件夹代替了容器内的文件夹,导致 nginx 没有了配置文件。
    然后本人尝试先不挂载文件夹,创建容器 test1 使用"docker cp "命令将容器 test1 内的 nginx 配置文件夹拷贝到宿主机内“/etc/nginx ”,删除容器 test1,在重新创建容器挂载宿主机配置文件夹,容器成功运行。
    有为什么方法可以将容器内的文件夹挂载到容器外吗?
    15 条回复    2021-02-25 18:20:39 +08:00
    GuryYu
        1
    GuryYu  
       2019-02-04 19:16:29 +08:00 via iPad
    nginx 镜像可以挂载 /etc/nginx/conf.d 目录,直接放 server 级别的配置就行了
    wd
        2
    wd  
       2019-02-04 19:18:38 +08:00 via iPhone
    你换个思路 把宿主的 mount 给容器 等于你先把容器的 cp 出来 然后再 moubt 就可以编辑了
    defunct9
        3
    defunct9  
       2019-02-04 19:30:09 +08:00 via iPhone
    开 ssh,让我上去看看
    zuolan
        4
    zuolan  
       2019-02-04 19:36:33 +08:00
    起一个 tmp 容器, 然后把容器的文件 docker cp 到本地, 这样你就有一份配置文件了.
    VECH
        5
    VECH  
    OP
       2019-02-04 19:44:03 +08:00
    @GuryYu 只适用于 nginx,其他服务镜像没法用,我又想到了一个办法,将容器内的配置文件夹 软或硬链接到挂载的文件夹里~
    @zuolan 这个我试过了,不过觉得有些麻烦,想找个更简单点的办法。比如创建容器时有没有参数可以直接解决这样的问题。
    eritpchy
        6
    eritpchy  
       2019-02-04 19:45:24 +08:00 via Android
    反向思路 docker cp 是正解 出入都可以用他操作, 自己写个脚本即可
    eritpchy
        7
    eritpchy  
       2019-02-04 19:47:52 +08:00 via Android
    你觉得不行的原因是 /etc/nginx 挂载点被宿主给覆盖了, 假如你先挂载再安装 nginx 呢? 又假如你自己 diy 一个 nginx 镜像呢?
    zhouzm
        8
    zhouzm  
       2019-02-04 23:56:14 +08:00
    我是这样配置的:
    -v ./nginx.conf:/etc/nginx/nginx.conf
    -v ./conf.d:/etc/nginx/conf.d
    yuikns
        9
    yuikns  
       2019-02-05 00:00:40 +08:00 via iPhone
    只有我没搞明白楼主意图么?

    cp 出来然后在 override 自己,这是什么需求啊……

    如果只是想要拿出数据。docker cp 难度是什么?
    如果是想要覆盖某个文件,那么 -v 也可以细化到具体文件。如果需要只增一个目录,那么可以写个 Dockerfile,然后
    FROM nginx
    COPY nginx /etc/nginx
    xuanbg
        10
    xuanbg  
       2019-02-05 00:23:17 +08:00
    楼主搞反了哈,不是把容器的文件夹映射到外面,而是把宿主机的文件夹映射给容器。你这个空的文件夹给容器作为配置文件,容器怎么能正常启动?
    soyoker
        11
    soyoker  
       2019-02-05 01:13:21 +08:00
    学习的时候记得 docker 内部的文件会随着容器关闭而不保存的吧?
    把宿主机的磁盘挂载就是方便即时修改容器实例的配置
    为什么要把 docker 内部的文件映射到外面呢?
    keji
        12
    keji  
       2019-02-05 01:34:38 +08:00 via Android
    同 8 楼,是把宿主机的文件中挂载到容器中,出现错误可以使用 docker logs 容器 id,通过日志查看相应报错信息
    yuikns
        13
    yuikns  
       2019-02-05 02:49:39 +08:00 via iPhone   1
    @xuanbg #10 的解释清楚

    终于明白楼主不明白在哪里了

    volume 的挂载就好像我们物理机器的 mount 一样,把一个虚拟的 device 放到某个路径下,而不是反之。
    zhouzm
        14
    zhouzm  
       2019-02-05 09:18:04 +08:00 via Android   1
    上面几位没仔细看贴,楼主知道 mount 怎么用,他的目的是想 docker 自定义配置目录时方便的得到 nginx 的 默认配置。

    我看了一下 nginx 官方 docker 的帮助,推荐的做法就是使用 docker cp:
    $ docker run --name tmp-nginx-container -d nginx
    $ docker cp tmp-nginx-container:/etc/nginx/nginx.conf /host/path/nginx.conf
    $ docker rm -f tmp-nginx-container

    或者写个 Dockerfile,自己 build 一个镜像。
    chrisia
        15
    chrisia  
       2021-02-25 18:20:39 +08:00
    @zhouzm 多谢,虽然感觉这样也太不优雅了,要挂载配置文件得先从 tmp 容器中拷贝...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2623 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 12:57 PVG 20:57 LAX 05:57 JFK 08:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86