我有一个docker-compose.yml
文件,其中包含以下内容:
volumes:
- .:/usr/app/
- /usr/app/node_modules
第一个选项将当前主机目录映射到/usr/app
,但第二个选项的作用是什么?
答案 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'