Docker 容器无法挂载文件夹

问题描述 投票:0回答:2

我正在开发一个应用程序。使用 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"
        }
    ]
docker volume mount
2个回答
2
投票

您正在创建卷,您没有使用文件夹。尝试使用当前目录中的文件夹

myfiles

version: '3.1'

services:
  api:
    image: api-image
    restart: always
    volumes:
      - ./myfiles:/files

0
投票

容器在 docker-compose.yml 中找不到挂载文件,因为容器无法在容器中创建包含挂载文件的文件夹。

链接到在容器中自动创建文件夹并挂载文件 当你希望容器自动创建文件夹或挂载文件时:

如果容器需要访问受 SELinux 保护的目录,则需要使用 :z 或 :Z 以确保 SELinux 不会阻止它。

  • 如果使用 z:该目录将可以被其他容器访问。
  • 如果使用 Z:第一个容器只能访问该目录并对其进行更改。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.