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

时间:2017-09-12 00:52:59

标签: docker docker-compose

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

volumes:
  - .:/usr/app/
  - /usr/app/node_modules

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

3 个答案:

答案 0 :(得分:14)

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

  • 主机卷存在于Docker主机的文件系统上,可以 从容器内访问。示例卷路径:

    try{ ... }catch(FileNotFoundException e){ }

  • 匿名卷对于您希望的时间非常有用 Docker处理存储文件的位置。这可能很难, 但是,当它是一个时,指的是相同的音量 匿名卷。示例卷路径:

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

  • 命名卷类似于匿名卷。 Docker管理 在磁盘上创建卷的位置,但是为其指定卷名。示例卷路径:

    /path/in/container

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

答案 1 :(得分:7)

第二个创建一个匿名卷。它将在docker volume ls中列出,其中包含长唯一ID而不是名称。如果您更新图像,Docker-compose将能够重用此功能,但很容易丢失哪个卷属于这些名称的内容,因此我建议始终为您的卷命名。

答案 2 :(得分:0)

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

  

如果没有匿名卷('/ usr / src / app / node_modules'),则在运行时通过安装主机目录将使node_modules目录基本消失:
  构建-创建了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'