- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
So I have this NodeJS express app. This is code works:
Dockerfile
FROM node:10.16-alpine
WORKDIR /app
COPY . /app
RUN npm install
CMD ["npm", "start"]
docker-compose.yml
version: "3.7"
services:
node-express:
build: .
ports:
- 80:3000
But for this app I want to see the live code changes. So I know that is where you can use Bind Mounts, but as soon as I add the volumes like so:
docker-compose.yml
version: "3.7"
services:
node-express:
build: .
volumes:
- .:/app
ports:
- 80:3000
It looks like the node_modules is not in the "app" directory anymore.. How can I fix this? I've worked on this for four hours, and I still can't spot the mistake!
错误
HijackManiac:webserver hijackmaniac$ docker-compose up
Creating network "webserver_default" with the default driver
Building node-express
Step 1/5 : FROM node:10.16-alpine
---> a298c79121d9
Step 2/5 : WORKDIR /app
---> Running in 9b99df0f54ba
Removing intermediate container 9b99df0f54ba
---> 48f9b606b32d
Step 3/5 : COPY . /app
---> 1f29dc735dc7
Step 4/5 : RUN npm install
---> Running in 81225f56a9fd
npm WARN webserver@1.0.0 No description
npm WARN webserver@1.0.0 No repository field.
added 106 packages from 130 contributors and audited 202 packages in 3.344s
found 0 vulnerabilities
Removing intermediate container 81225f56a9fd
---> 2985dc77bc12
Step 5/5 : CMD ["npm", "start"]
---> Running in 271ab42687ce
Removing intermediate container 271ab42687ce
---> 38a39768792e
Successfully built 38a39768792e
Successfully tagged webserver_node-express:latest
WARNING: Image for service node-express was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating webserver_node-express_1 ... done
Attaching to webserver_node-express_1
node-express_1 |
node-express_1 | > webserver@1.0.0 start /app
node-express_1 | > node src/app.js
node-express_1 |
node-express_1 | internal/modules/cjs/loader.js:638
node-express_1 | throw err;
node-express_1 | ^
node-express_1 |
node-express_1 | Error: Cannot find module 'express'
node-express_1 | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
node-express_1 | at Function.Module._load (internal/modules/cjs/loader.js:562:25)
node-express_1 | at Module.require (internal/modules/cjs/loader.js:690:17)
node-express_1 | at require (internal/modules/cjs/helpers.js:25:18)
node-express_1 | at Object.<anonymous> (/app/src/app.js:2:17)
node-express_1 | at Module._compile (internal/modules/cjs/loader.js:776:30)
node-express_1 | at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
node-express_1 | at Module.load (internal/modules/cjs/loader.js:653:32)
node-express_1 | at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
node-express_1 | at Function.Module._load (internal/modules/cjs/loader.js:585:3)
node-express_1 | npm ERR! code ELIFECYCLE
node-express_1 | npm ERR! errno 1
node-express_1 | npm ERR! webserver@1.0.0 start: `node src/app.js`
node-express_1 | npm ERR! Exit status 1
node-express_1 | npm ERR!
node-express_1 | npm ERR! Failed at the webserver@1.0.0 start script.
node-express_1 | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
node-express_1 | npm WARN Local package.json exists, but node_modules missing, did you mean to install?
node-express_1 |
node-express_1 | npm ERR! A complete log of this run can be found in:
node-express_1 | npm ERR! /root/.npm/_logs/2019-06-04T23_55_20_327Z-debug.log
webserver_node-express_1 exited with code 1
最佳答案
您需要修改您的项目结构,将每个可编辑的代码移动到一个文件夹中(比方说 src
),或者更新您的 Dockerfile 以将 node_modules
移动到上层目录。
我们知道,当 Node 在当前目录找不到 node_modules 时,它会开始在父目录中寻找它,因此我们可以利用它。
与此类似的 Dockerfile 将解决您的问题。
FROM node:10.16-alpine
WORKDIR /node
COPY package.json package-lock.json ./
RUN npm install
WORKDIR /node/app
COPY . .
CMD ["npm", "start"]
请确保对 docker-compose.yml 也进行适当的更改(目录结构已更改)
关于javascript - 由于绑定(bind)安装,Dockerfile 和 docker-compose 找不到节点模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56452736/
我正在尝试使用谷歌云构建触发器来构建我的 docker 容器。不幸的是,构建没有找到我的 docker 文件。它不在我的存储库的根目录中,但我认为我可以指定一个相对路径。显然我配置错误了。下面是我的
我可以像这样构建一个 Dockerfile docker build -t deepak/ruby . 但是对于一个不名为Dockerfile的Dockerfile # DOCKER-VERSION
是否可以命名构建阶段?我正在搜索类似以下示例的内容: ARG NAME FROM python:3.7-alpine as modul-${NAME} # ... 如果我尝试这个例子,就会发生这个错误
在我的 Dockerfile 中,我需要使用命令替换来添加一些环境变量。我想设置 ENV PYTHONPATH /usr/local/$(python3 -c 'from distutils impo
以下Dockerfile包含四个COPY层: COPY README.md ./ COPY package.json ./ COPY gulpfile.js ./ COPY __BUILD_NUMBE
我正在尝试从我创建的 Dockerfile 中拉取 tomcat,并使用以下命令拉取 centos: FROM centos RUN docker run -it tomcat 然后现在我正在创建一个
我不确定是否应该为我的 Node.js 应用程序创建不同的 Dockerfile 文件。一种用于没有开发依赖项的生产,另一种用于包含开发依赖项的测试。 或者一个基本上是开发Dockerfile.dev
我拥有的是多个相似且简单的dockerfile 但我想要的是有一个单一的基础 dockerfile 和我的 dockerfile将他们的变量传递给它。 在我的例子中,dockerfile 之间的唯一区
我有一个应用程序有两个 Dockerfile ,说 Dockerfile.foo和 Dockerfile.bar ,预计将为 docker-compose.yml 的两个不同服务生成两个不同的图像.
我是一个 docker maven 插件新手。 如果我理解得很好,根据Spotify's Dockerfile Maven documentation ,应该将 Dockerfile 放在我的项目的根
我正在设置一个docker容器,将在this article之后在nginx服务器上为我的Angular 5应用程序提供服务。 本文提出了这个Dockerfile: # Stage 0, based
大家好, 我是 docker 的新手,我想容器化我的 ASP.NET Core 应用程序,但出现错误,我无法继续构建我的图像 这是我的示例 Dockerfile FROM microsoft/dotn
我想在不使用注册表的情况下链接 Dockerfiles,这可以通过 FROM 实现吗?陈述? 以两个 Dockerfile 为例: Dockerfile /some/other/dir/Dockerf
我尝试在公共(public) dockerhub 上通过我自己的镜像安装 Airflow,但它在本地运行完美,但当我尝试在 Openshift 上使用它时。我在下面收到此错误。 `ERROR: Cou
此 dockerfile 工作正常。但是如何在 dockerfile 中执行命令? FROM alpine RUN apk add --update sqlite && rm -rf /var/cac
当我尝试设置自动构建时,我的 Docker Hub 存储库中的 Dockerfile 为空。如果我触发构建:- Build failed: Dockerfile not found at ./Dock
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 1年前关闭。 Improve this
我目前正在将一个巨大的 DockerFile 拆分为单独的 DockerFile,但是在巨大的 DockerFile 中定义的一些变量需要在单独的 DockerFile 中使用。 Docker 是否有
我有一个 Dockerfile 可以创建我想在这里使用的构建镜像:~/build/Dockerfile 然后我使用一个标准镜像来部署 从 ~/build/Dockerfile 构建的图像没有在任何地方
我运行这个: ➜ frontend git:(master) ✗ docker-compose up Building web ERROR: Cannot locate specified Dock
我是一名优秀的程序员,十分优秀!