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

不懂就问~Docker 无法挂载/etc/nginx 目录

  •  
  •   noahsophie · 2019-07-19 12:04:43 +08:00 · 7737 次点击
    这是一个创建于 1973 天前的主题,其中的信息可能已经有所发展或是发生改变。

    docker-compose 配置如下

    version: "3"
    services:
            nginx:
                    image: nginx
                    ports:
                            - "80:80"
                    container_name: nginx
                    restart: always
                    privileged: true
                    volumes:
                            #1 - /data/nginx:/etc/nginx
                            #2 - /etc/nginx
    
    
    

    用第一种方式,会报错 open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)

    用第二种方式就没问题

    不知道为什么第一种方式,容器的文件没有同步到宿主机上,权限都有

    本人刚学 Docker

    第 1 条附言  ·  2019-07-19 13:41:35 +08:00
    不知道这个挂载是什么流程。
    是把容器的目录下文件复制到宿主机的目录下?还是什么
    10 条回复    2019-07-19 17:40:51 +08:00
    noahsophie
        1
    noahsophie  
    OP
       2019-07-19 12:06:30 +08:00
    目前我是照着这个教程学的:https://yeasy.gitbooks.io/docker_practice/content/
    大佬们要是有好的学习地址,也可以发一下
    kchum
        2
    kchum  
       2019-07-19 12:59:44 +08:00 via iPhone
    你别挂载先 复制一份 nginx.conf 出来了放在要挂载的目录
    kchum
        3
    kchum  
       2019-07-19 13:03:14 +08:00 via iPhone
    /etc/nginx/的所有文件复制到 host 要挂载的目录
    gam2046
        4
    gam2046  
       2019-07-19 13:11:22 +08:00
    因为你的宿主环境下 /data/nginx/nginx.conf 文件不存在呀,提示说的很清楚了。容器内这样提示,而容器内这个目录是由宿主 mount 进去的。

    那么结果就是要么宿主挂载目录下没有这个文件,要么是宿主目录下存在这个文件,但是容器内的 nginx 没有权限读取。
    noahsophie
        5
    noahsophie  
    OP
       2019-07-19 13:39:12 +08:00
    @kchum @gam2046
    我 MYSQL 这样挂载目录,也没事先复制文件到宿主机上啊
    但是查看 /data/insane_mysql 目录,里面文件和容器内的文件一样
    version: "3"
    services:
    db:
    image: mysql:5.7
    container_name: insane_mysql
    restart: always
    ports:
    - "3306:3306"
    environment:
    MYSQL_ROOT_PASSWORD: "123456"
    volumes:
    - /data/insane_mysql:/var/lib/mysql
    VD
        6
    VD  
       2019-07-19 13:46:53 +08:00
    @noahsophie 因为 mysql 容器启动,没有库的情况下,默认新建一个库,所以最后 mysql 就跑起来了

    nginx 因为没有找到 nginx.conf,所以终止了,容器也就启动失败了 。
    VD
        7
    VD  
       2019-07-19 13:48:11 +08:00
    挂载是这样的

    /host/path:/container/path

    讲宿主机的目录或文件,挂载到容器中
    noahsophie
        8
    noahsophie  
    OP
       2019-07-19 13:52:59 +08:00
    @VD 知道了~ 那么我上面第二种不指定目录方式绑定成功,是 docker 帮我把容器的文件复制到宿主机目录下了吗
    VD
        9
    VD  
       2019-07-19 14:20:13 +08:00
    noahsophie
        10
    noahsophie  
    OP
       2019-07-19 17:40:51 +08:00
    @VD 理解了~
    第一种方式 Type:bind
    第二种方式 Type:volume
    参考连接: https://docs.docker.com/storage/bind-mounts/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:45 · PVG 03:45 · LAX 11:45 · JFK 14:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.