【问题标题】:Nodemon not installed after docker build imagedocker build 映像后未安装 Nodemon
【发布时间】:2022-01-07 21:01:53
【问题描述】:

我有一个节点应用程序的图像。在 package.json 我有 nodemon。我想通过更新主机源来运行容器,其中nodemon 将随着主机 src 的更改而热重载。所以我使用的是绑定挂载。

package.json 来自节点应用程序。

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon app.js"
  },
  "author": "MOI",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "mongoose": "^5.10.3",
    "morgan": "^1.10.0"
  },
 "devDependencies": {
    "nodemon": "^2.0.4"
 }
}

Dockerfile

FROM node

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 80

CMD ["npm", "start"]

然后我用这个运行容器,当我检查日志时,我看不到nodemon 正在运行。几乎就像它根本没有安装一样。有什么想法可以解决这个问题吗?

docker run --name goals-backend -v /Users/path/for/bind/mount/backend:/app \
-v logs:/app/logs -v /app/node_modules -d --rm \
-p 80:80 --network goals-net goals-node

【问题讨论】:

  • 如果您的目标是在主机代码上实时重新加载,使用基于主机的 Node 环境是否更有意义,而不是引入 Docker 作为隔离层,然后尝试解决其隔离问题特点?
  • 公平点。我正在学习教程,所以我可能永远不会尝试在现实生活中完成此任务。

标签: node.js docker nodemon


【解决方案1】:

您在 /app 上的绑定会“隐藏”图像中“/app”中的所有内容,并将其替换为主机上 /Users/path/for/bind/mount/backend 的内容。 与 /app/node_modules 上的卷相同,但由于这是一个卷而不是绑定挂载,因此 /app/node_modules 的内容将在第一次创建卷时复制到该卷。

在没有卷映射的情况下运行它以确保映像按原样工作

docker run --name goals-backend -d --rm -p 80:80 --network goals-net goals-node

【讨论】:

  • 嗨!我确实再次尝试了一切,第一次运行命令没有您所说的卷,但仍然没有。我没有看到nodemon 已安装或npm start 脚本正在运行的迹象。
  • 删除我的卷后,现在可以正常工作了。
猜你喜欢
  • 2022-11-18
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 2020-07-17
相关资源
最近更新 更多