Docker ExpressJS公用文件夹卷

Docker ExpressJS公用文件夹卷,docker,express,dockerfile,docker-volume,Docker,Express,Dockerfile,Docker Volume,我想在Express应用程序的Docker上为我的公用文件夹创建一个卷。因为当用户上传图片时,我会将它们保存到public/uploads,但是当我对代码进行更改,并且必须使用docker compose run-build进行重建时,我会丢失所有这些图片 我试图找到一种创建卷的方法,但我不知道如何链接它 我的Dockerfile仅包含以下内容: FROM node:8.10.0-alpine WORKDIR /usr/src/app COPY package*.json ./ RUN np

我想在Express应用程序的Docker上为我的公用文件夹创建一个卷。因为当用户上传图片时,我会将它们保存到public/uploads,但是当我对代码进行更改,并且必须使用docker compose run-build进行重建时,我会丢失所有这些图片

我试图找到一种创建卷的方法,但我不知道如何链接它

我的Dockerfile仅包含以下内容:

FROM node:8.10.0-alpine

WORKDIR /usr/src/app
COPY package*.json ./

RUN npm install
# RUN npm ci --only=production

COPY . .
CMD [ "npm", "start" ]
我的目标是为公共/上传的上传图像提供服务,而不是在docker compose运行-构建时将其删除。

根据官方说法,您可以使用-mount标志:


你看过这里的文件了吗?这里有很多例子。您在创建卷时遇到了问题,还是有具体的问题?谢谢,我一定是瞎了眼才错过了。但你能为我澄清一下目标参数到底代表什么吗?我假设source是我想保存在单独卷中的路径。是的,没错。正如我在代码中所写的,目标是文件系统中的位置。玩一点,你会让它工作!如果对您有效,请不要忘记接受答案:Docker映像无法指定在运行时使用特定的主机目录。有一个docker run-mount选项,但这是一个运行时选项,而不是Dockerfile选项。有一些与您显示的内容相匹配,但我的理解是,此装载在映像构建序列结束时过期,无法指定和任意主机路径。实际上,我通过修改docker-compose.yml,添加卷解决了我的问题:-./public/images/uploads:/usr/src/app/public/images/uploads。谢谢你给我一个起点。编辑:正如@DavidMaze所提到的,您的解决方案实际上返回了一个语法错误,表示挂载的标志无效。
//Dockerfile

FROM node:8.10.0-alpine

WORKDIR /usr/src/app
COPY package*.json ./

RUN npm install
# RUN npm ci --only=production

RUN --mount=target=/some_location_in_file_system,type=bind,source=public/uploads

COPY . .
CMD [ "npm", "start" ]