我正在开发一个应用程序。使用 NodeJS 进行语言,使用 docker docker-compose 进行部署。
我有一个用于上传文件的端点。当我上传文件时,应用程序将其保存在“文件”文件夹中(文件文件夹位于项目的根目录下)。当容器重新启动时,我不想丢失文件,因此我创建了一个名为“myfiles”的卷并将其安装到“/files”路径。
但是当我检查 myfiles 卷路径时,我没有看到任何由 api 创建的文件。如果我重新启动容器,上传的文件就会消失。
这是我的 api docker-compose.yaml 文件
version: '3.1'
services:
api:
image: api-image
restart: always
volumes:
- myfiles:/files
volumes:
myfiles:
之后
docker-compose up -d
我上传一些文件并通过调用在容器中查看它们
docker exec -it container_name ls
files node_modules package.json
index.js package-lock.json src
docker exec -it container_name ls files
d5a3455a39d8185153308332ca050ad8.png
文件创建成功。
我检查了容器是否正确安装
docker inspect container_name
和结果:
"Mounts": [
{
"Type": "bind",
"Source": "/var/lib/docker/volumes/myfiles/_data",
"Destination": "/files",
"Mode": "rw",
"RW": true,
"Propagation": "rslave"
}
]
您正在创建卷,您没有使用文件夹。尝试使用当前目录中的文件夹
myfiles
:
version: '3.1'
services:
api:
image: api-image
restart: always
volumes:
- ./myfiles:/files
容器在 docker-compose.yml 中找不到挂载文件,因为容器无法在容器中创建包含挂载文件的文件夹。
链接到在容器中自动创建文件夹并挂载文件 当你希望容器自动创建文件夹或挂载文件时:
如果容器需要访问受 SELinux 保护的目录,则需要使用 :z 或 :Z 以确保 SELinux 不会阻止它。