【问题标题】:node js docker-compose volume empty节点 js docker-compose 卷为空
【发布时间】:2021-08-11 12:53:05
【问题描述】:

我编写了一个应用程序,可以将一些图像下载到src/storage 路径中名为storage 的文件夹中。在开发模式(无容器)和生产模式(容器)下一切正常,但卷将是空的。

docker-compose:

version: "3.2"

services:
  app:
    build: .
    volumes:
      - ./storage-data:/src/storage
    depends_on:
      - db
    env_file:
      - prod.env
    networks:
      - app_network

networks:
  app_network:

Dockerfile:

FROM node:14
WORKDIR /usr/src/app
COPY package.json yarn.lock ./

RUN npm install

COPY ./src .

CMD [ "node", "app.js" ]

这是我的下载功能:

const { createWriteStream } = require("fs");
const { pipeline } = require("stream");
const { promisify } = require("util");
const fetch = require("node-fetch");

const download = async ({ url, path }) => {
  const streamPipeline = promisify(pipeline);
  const response = await fetch(url);

  if (!response.ok) {
    throw new Error(`unexpected response ${response.statusText}`);
  }

  await streamPipeline(response.body, createWriteStream(path));
};

module.exports = download;

最后是代码:

    for (const [i, product] of products.entries()) {
      const { thumbnail, name } = product;
      const ext = thumbnail.slice(thumbnail.lastIndexOf("."));
      const filePath = `${path.join(__dirname, "../storage")}/${
        brand.text
      }-${slugify(name)}-thumbnail${ext}`;

      try {
        await download({
          url: thumbnail,
          path: filePath,
        });
        products[i].thumbnail = filePath.slice(filePath.indexOf("src"));

        logger.info(`"${name}" thumbnail saved to ${filePath}`);
      } catch (error) {
        logger.error(error);
      }
    }

正如我所说,它在容器中下载文件但卷文件夹是空的并且没有错误。

如果我使用 docker exec 检查 docker 容器,我可以看到下载的文件。

【问题讨论】:

  • 哪个路径可以看到下载的文件?可以分享一下 Dockerfile 吗?
  • @ErangaHeshan Dockerfile 添加。文件下载到 src/storage 文件夹中。
  • 您在/src/storage 上安装卷,但您的应用程序代码在/usr/src/app/src 中。
  • @ErangaHeshan WORKDIR /usr/src/app 工作目录是 Dockerfile 是这个。

标签: node.js docker docker-compose docker-volume


【解决方案1】:

更新:

您需要将卷挂载到您从图像目录中容器内的终端执行pwd 时看到的绝对路径。


您需要更改 docker-compose 文件的 volumes,如下所示:

volumes:
      - ./storage-data:/usr/src/app/src/storage

【讨论】:

  • 仍然创建空文件夹
  • 它还在向您显示容器中的图像吗?您需要将卷挂载到您从图像目录中容器内的终端执行pwd 时看到的绝对路径。
  • 嘿伙计,你帮我解决了我的问题。非常感谢。
  • 你能不能通过点击我的答案旁边的勾号来接受我的答案 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
相关资源
最近更新 更多