节点 js docker-组成空卷
node js docker-compose volume empty
我编写了一个应用程序,可以将一些图像下载到 src/storage
路径中名为 storage
的文件夹中。在开发模式(无容器)和生产模式(容器)中一切正常,但卷将为空。
docker-撰写:
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 容器,我可以看到下载的文件。
更新:
您需要将卷挂载到从图像目录中的容器内的终端执行 pwd
时看到的绝对路径。
您需要更改 docker-compose 文件的 volumes
,如下所示:
volumes:
- ./storage-data:/usr/src/app/src/storage
我编写了一个应用程序,可以将一些图像下载到 src/storage
路径中名为 storage
的文件夹中。在开发模式(无容器)和生产模式(容器)中一切正常,但卷将为空。
docker-撰写:
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 容器,我可以看到下载的文件。
更新:
您需要将卷挂载到从图像目录中的容器内的终端执行 pwd
时看到的绝对路径。
您需要更改 docker-compose 文件的 volumes
,如下所示:
volumes:
- ./storage-data:/usr/src/app/src/storage