node.js - 如何使用NodeJS和Docker Compose处理卷?

标签 node.js express docker docker-compose dockerfile

我正在尝试使其与docker-compose和volume一起使用nodejs,我想编辑我的代码,这就是为什么我应该使用卷。

当我不将卷放入docker-compose.yml文件中时,它起作用了!但是随着数量的增加没有任何工作。

任何的想法?

这是我的docker-compose.yml:

version: "3.2"
services:
 node:
   container_name: node_app
     build:
      context: ./
      dockerfile: dockerfiles/Dockerfile
     user: "node"
     environment:
       - NODE_ENV=production
     volumes:
       - .:/home/app
     ports:
       - "3000:3000"

这是我的Dockerfile:
FROM node:carbon-stretch
WORKDIR /home/app
COPY package*.json ./
RUN npm i express -S
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]

这是我的package.json:
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <test@gmail.com>",
  "main": "server.js",
  "scripts": {
     "start": "node server.js"
   }
 }

这是我的server.js:
'use strict'
 const express = require('express')

 // Constants
 const PORT = 3000
 const HOST = '0.0.0.0'

 // App
 const app = express()
 app.get('/', (req, res) => {
   res.send('Hello world\n')
 });

 app.listen(PORT, HOST)
 console.log(`Running on http://${HOST}:${PORT}`)

谢谢!

最佳答案

问题是,当您将文件夹.挂载到/home/app上时,主机上/home/app的内容会覆盖.中的所有内容。这有效地删除了RUN npm i express -S引入的内容

为了解决这个问题,您需要将要编辑的代码隔离到一个单独的文件夹中(如果不是这种情况)

volumes:
  - ./code:/home/app/code

关于node.js - 如何使用NodeJS和Docker Compose处理卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48104968/

相关文章:

mysql - ExpressJS : push query values in array and route to ejs

node.js - 如何获得可用的 Mongoose 鉴别器列表?

node.js - Docker Node.js 环境变量

php - 向所有用户显示该事件正在进行中

node.js - 如何在AWS s3上存储图像缩略图

Dockerfile COPY {source :-. ..}

javascript - Node js Express尝试将orm json传递给客户端

带有自定义 sessionID 错误的 node.js Express 4 session

mysql - docker,无法启动从官方 docker 镜像 mysql 构建的 docker mysql 容器

mysql - 扩展 mysql 镜像的 Docker 镜像未运行 initdb 脚本