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

2020-02-12 23:29:56 +08:00
 stille

作为 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:
3102 次点击
所在节点    Docker
2 条回复
dcalsky
2020-02-13 00:45:21 +08:00
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
2020-02-13 01:00:14 +08:00
@dcalsky 感谢..我也是搜索了很多都找不到详细的解决办法...后来大致了解顶级卷...实际上在多个 docker 需要共享一个目录时,就使用顶级卷处命名,然后在需要的位置 -v 命名卷 后 在顶级卷在去定义挂载到某个绝对路径也是可以的把.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/644161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX