【问题标题】:Docker ExpressJS public folder volumeDocker ExpressJS 公用文件夹卷
【发布时间】:2019-06-30 20:04:50
【问题描述】:

我想在 Express App 上的 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" ]

我的目标是提供来自“public/uploads”的上传图片,不要在docker-compose run --build 删除它们。

【问题讨论】:

标签: docker express dockerfile docker-volume


【解决方案1】:

根据官方documentation,可以使用--mount标志:

//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" ]

【讨论】:

  • 谢谢,我一定是瞎了眼才错过。但是你能帮我澄清一下目标参数到底代表什么吗?我假设源是我想保留在单独卷中的路径。
  • 没错。正如我在代码中所写,目标是文件系统中的位置。稍微玩一下,你会得到它的工作!如果它对您有用,请不要忘记接受答案:)
  • Docker 映像无法指定它在运行时使用特定的主机目录。有一个 docker run --mount 选项,但这是一个运行时选项,而不是 Dockerfile 选项。 experimental syntax 与您显示的内容相匹配,但我的理解是,此挂载在映像构建序列结束时“过期”,无法指定任意主机路径。
  • 其实我通过修改docker-compose.yml,添加volumes: - ./public/images/uploads:/usr/src/app/public/images/uploads解决了我的问题。谢谢你给我一个起点。编辑:也正如@DavidMaze 提到的,你的解决方案实际上返回了一个语法错误,说无效的标志安装。
猜你喜欢
  • 2023-03-12
  • 2016-11-18
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多