V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kkxxxxxxx
V2EX  ›  Docker

Docker 映射容器目录启动,空目录无数据

  •  1
     
  •   kkxxxxxxx · 2017-03-29 14:03:13 +08:00 · 11645 次点击
    这是一个创建于 2804 天前的主题,其中的信息可能已经有所发展或是发生改变。

    docker run -d -p 80:80 --name=website apache:latest sh 直接运行后,可以正常访问到容器 website /web/html 下的示例页面

    docker run -d -p 80:80 -v /home/data:/web/html --name=website apache:latest sh 映射宿主目录 /data 到容器 website 的 /web/html 目录, 启动后 /data 和 /web/html 目录下都没有数据,空目录

    环境 CentOS7 、 root 身份创建的容器,也没报错,有朋友知道这是什么情况吗

    13 条回复    2017-03-30 15:46:53 +08:00
    Sharuru
        1
    Sharuru  
       2017-03-29 14:16:57 +08:00
    host 的目录权限也会影响到 container 内的读取,请确认。
    aogg
        2
    aogg  
       2017-03-29 14:30:42 +08:00
    目录后面要加 /
    cloverstd
        3
    cloverstd  
       2017-03-29 15:05:47 +08:00
    host 的目录挂载进去,容器里的目录会被 host 的目录里的内容覆盖掉
    host 的目录如果不存在, docker 会创建一个 host 目录,再挂载到容器里
    Bardon
        4
    Bardon  
       2017-03-29 17:08:07 +08:00
    因为你 /web/html 示例页面被 host 目录 /home/data 覆盖了呀...
    你需要在你 host 目录 /home/data 创建示例页面,同时 uid gid 要重设为 /web/html 的权限
    kkxxxxxxx
        5
    kkxxxxxxx  
    OP
       2017-03-29 17:39:19 +08:00
    @Sharuru /home/data 目录权限 755,容器有自动创建宿主目录,改成 777 也没效果
    @aogg 可以不加 /
    @cloverstd 宿主目录 /home/data 由容器创建

    不映射目录的情况下测试发现:
    docker run -d --name=website apache:latest 正常访问容器 /web/html 示例页面
    docker run -d --name=website apache:latest sh 启动后容器 /web/html 目录为空
    kkxxxxxxx
        6
    kkxxxxxxx  
    OP
       2017-03-29 17:47:35 +08:00
    @Bardon docker exec -t -i website sh 进去
    ls: can't open '/web': Permission denied
    cxbig
        7
    cxbig  
       2017-03-29 17:52:05 +08:00
    @kkxxxxxxx 你还是没有说清楚,你的 Host 机目录 /home/data 是否为空目录
    如果 /home/data 是空的,那么挂载进去 /web/html 亦为空
    如果 /home/data 有内容,挂载后 /web/html 还是空的,需要检查别的因素
    从外向内 volume 挂载,内部原有内容将被覆盖,而不是内外同步
    猜测你是想通过挂载,让内部 /web/html 原有内容出现在 Host 机 /home/data 里
    kkxxxxxxx
        8
    kkxxxxxxx  
    OP
       2017-03-29 17:58:19 +08:00
    @cxbig 宿主机 /home 下原来没有 data 目录, data 目录为容器映射时自动创建的,应该不存在内容被覆盖的问题, /home 目录权限 755
    cxbig
        9
    cxbig  
       2017-03-29 18:13:36 +08:00
    @kkxxxxxxx 如果是这样,内外都是空的是正常情况
    试着在 /home/data 创建个文件,再进去 container 看他们在不在 /web/html 里
    kkxxxxxxx
        10
    kkxxxxxxx  
    OP
       2017-03-29 18:21:08 +08:00
    @cxbig container /web 提示无权限操作
    ls: can't open'/web': Permission denied
    这个权限是指哪的权限?
    host /home/data 755
    container /web 755
    cxbig
        11
    cxbig  
       2017-03-29 18:31:02 +08:00
    @kkxxxxxxx 那是内部权限,这个错误有点奇怪, container 里一般是 root 用户的,不应该有 Permission 这种问题
    尝试在 docker run 命令里加一个参数 -w /web/html
    kkxxxxxxx
        12
    kkxxxxxxx  
    OP
       2017-03-29 23:02:30 +08:00
    @cxbig -w 后容器一启动就关闭,好郁闷,同样的命令在另外几台 Docker 上都正常,反倒是这台新装的 CentOS7 这么奇怪,是不是少装了什么东西
    kkxxxxxxx
        13
    kkxxxxxxx  
    OP
       2017-03-30 15:46:53 +08:00
    @Sharuru @aogg @cloverstd @Bardon @cxbig
    感谢大家提供线索,原来是 selinux 的锅,已解决
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2535 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 499ms · UTC 00:21 · PVG 08:21 · LAX 16:21 · JFK 19:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.