Docker Compose:没有冒号的卷(:)

mus*_*sme 14 docker docker-compose

我有一个docker-compose.yml包含以下内容的文件:

volumes:
  - .:/usr/app/
  - /usr/app/node_modules
Run Code Online (Sandbox Code Playgroud)

第一个选项将当前主机目录映射到/usr/app,但第二个选项的作用是什么?

Wil*_*lva 21

根据Docker的知识库,只是为了补充已接受的答案,有三种类型的卷:主机,匿名命名:

  • 一个主机卷住在泊坞主机的文件系统,可以从容器中进行访问.示例卷路径:

    /path/on/host:/path/in/container

  • 一个匿名的体积是当你宁愿泊坞窗把手在文件存储有用.但是,当它是匿名卷时,可能很难引用相同的卷.示例卷路径:

    /path/in/container

  • 一个名为体积类似于一个匿名的体积.Docker管理磁盘创建卷的位置,但是为其指定卷名.示例卷路径:

    name:/path/in/container

您的示例中使用的路径是匿名卷.


BMi*_*tch 8

第二个创建一个匿名卷.它将docker volume ls以长唯一ID而不是名称列出.如果你更新你的图像,Docker-compose将能够重用它,但是很容易忘记哪个卷属于那些名称,所以我建议总是给你的卷命名.

  • @BMitch谢谢你!我没有成功地寻找"没有结肠的volumnes". (2认同)

flo*_*w3r 8

在阅读教程时,我也遇到了同样的问题,这些行实际上可以做什么的答案是:

如果没有匿名卷('/usr/src/app/node_modules'),node_modules 目录实际上会通过在运行时安装主机目录而消失:
Build - 创建 node_modules 目录。
运行- 当前目录被复制到容器中,覆盖容器构建时刚刚安装的node_modules。

docker-compose.yml为此的文件:

version: '3.5'

services:

  something-clever:
    container_name: something-clever
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - '.:/usr/src/app'
      - '/usr/src/app/node_modules'
    ports:
      - '4200:4200'
Run Code Online (Sandbox Code Playgroud)