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

求咨询此 docker-compose.yml 中的卷问题?

  •  
  •   stille ·
    stilleshan · 2020-02-12 23:29:56 +08:00 · 2978 次点击
    这是一个创建于 1506 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为 docker 新手,还没有能够实践用到顶级卷的地方.大致了解了下可能是用于各容器之间共享目录的.不知道对不对.

    根据这个 docker-compose.yml 示例中,有两个命名卷 databasechevereto_images ,而最后三行是顶级卷吧?不太懂有什么用...

    作为处女座我的希望这 2 个目录放在 docker-compose.yml 的当前目录下.并且 chevereto_images 改为 images.于是改为 ./database./images ,然后把最后一行 chevereto_images 也改为 images 了..

    按理说那目前就不是命名卷,而是挂载目录了..那最后那三行还有意义吗?会不会有什么影响?

    version: '3'
    
    services:
      db:
        image: mariadb
        volumes:
          - database:/var/lib/mysql:rw
        restart: always
        networks:
          - private
        environment:
          MYSQL_ROOT_PASSWORD: chevereto_root
          MYSQL_DATABASE: chevereto
          MYSQL_USER: chevereto
          MYSQL_PASSWORD: chevereto
    
      chevereto:
        depends_on:
          - db
        image: nmtan/chevereto
        restart: always
        networks:
          - private
        environment:
          CHEVERETO_DB_HOST: db
          CHEVERETO_DB_USERNAME: chevereto
          CHEVERETO_DB_PASSWORD: chevereto
          CHEVERETO_DB_NAME: chevereto
          CHEVERETO_DB_PREFIX: chv_
        volumes:
          - chevereto_images:/var/www/html/images:rw
        ports:
          - 8080:80
    
    networks:
      private:
    volumes:
      database:
      chevereto_images:
    
    2 条回复    2020-02-13 01:00:14 +08:00
    dcalsky
        1
    dcalsky  
       2020-02-13 00:45:21 +08:00   ❤️ 1
    1. 有两个命名卷 database 和 chevereto_images ,而最后三行是顶级卷吧: 是,主要用处是 Service 之间共享文件。

    2. 作为处女座我的希望这 2 个目录放在 docker-compose.yml 的当前目录下: 如果是 Top-level Volume 可以用 driver 和 driver_opt,但是不推荐。所以推荐你取消这两个 Top-level Volumes,改为 Service Volume,这样可以存在本地。

    3. 并且 chevereto_images 改为 images.于是改为 ./database 和 ./images ,然后把最后一行 chevereto_images 也改为 images: 可以。

    4. 查文档和自己动手操作一下都能找到答案,而 V2EX 一小时都不会回答你。

    ```yaml
    version: '3'

    services:
    db:
    image: mariadb
    volumes:
    -./database:/var/lib/mysql:rw
    restart: always
    networks:
    - private
    environment:
    MYSQL_ROOT_PASSWORD: chevereto_root
    MYSQL_DATABASE: chevereto
    MYSQL_USER: chevereto
    MYSQL_PASSWORD: chevereto

    chevereto:
    depends_on:
    - db
    image: nmtan/chevereto
    restart: always
    networks:
    - private
    environment:
    CHEVERETO_DB_HOST: db
    CHEVERETO_DB_USERNAME: chevereto
    CHEVERETO_DB_PASSWORD: chevereto
    CHEVERETO_DB_NAME: chevereto
    CHEVERETO_DB_PREFIX: chv_
    volumes:
    -./images:/var/www/html/images:rw
    ports:
    - 8080:80

    networks:
    private:
    ```
    stille
        2
    stille  
    OP
       2020-02-13 01:00:14 +08:00
    @dcalsky 感谢..我也是搜索了很多都找不到详细的解决办法...后来大致了解顶级卷...实际上在多个 docker 需要共享一个目录时,就使用顶级卷处命名,然后在需要的位置 -v 命名卷 后 在顶级卷在去定义挂载到某个绝对路径也是可以的把.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5433 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:44 · PVG 16:44 · LAX 01:44 · JFK 04:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.