ove*_*wed 0 node.js dockerfile npm-install
我对 Node.js 进行了 docker 化,一切正常
Dockerfile:
FROM node:alpine
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
EXPOSE 9000
CMD ["npm", "run", "dev"]
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 Dockerfile 之外运行npm install并将内容复制npm install到 docker 容器
在我运行的 docker 主机上
npm install --prefix /opt/npm/ -g
Run Code Online (Sandbox Code Playgroud)
文件夹/opt/npm/lib/node_modules/ui已创建。在该文件夹中,有一堆 json 文件和文件夹 node_modules。Dockerfile 位于该文件夹中。现在,在 Dockerfile 中,我跳过了 npm install,只是将 /opt/npm/lib/node_modules/ui 的内容复制到 docker 容器。
修改后的 Dockerfile
FROM node:alpine
WORKDIR '/app'
COPY . .
EXPOSE 9000
Run Code Online (Sandbox Code Playgroud)
已成功从 Dockerfile 构建映像,但是当尝试从该映像运行容器时
docker run -p 9000:4200 pm
> ui@0.0.0 dev /app
> ng serve --host 0.0.0.0 --proxy-config src/proxy.conf.json
sh: ng: not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! ui@0.0.0 dev: `ng serve --host 0.0.0.0 --proxy-config src/proxy.conf.json`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the ui@0.0.0 dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?
Run Code Online (Sandbox Code Playgroud)
是否可以npm install在 docker 容器之外运行?
当对任何应用程序进行 docker 化时,您应该始终在 docker 容器中编译并安装依赖项。
您的 Docker 文件启动形式node:alpine。这意味着当您安装需要在(您的操作系统)外部编译的 npm 软件包时,alpine 操作系统将无法使用它。
最佳实践是始终在同一操作系统上构建应用程序。这就是docker引入构建容器的方式。
# Dockerfile
FROM node:12.13-alpine As build
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
FROM node:12.13-alpine as production
WORKDIR /usr/src/app
COPY ./ ./ # copy static files
COPY --from=build /usr/src/app/node_modules ./. # Copy node_modules from build container
EXPOSE 3000
CMD ["node", "main.js"]
Run Code Online (Sandbox Code Playgroud)
# .dockerignore
node_modules
Dockerfile
Run Code Online (Sandbox Code Playgroud)
尝试使其适合您的环境
| 归档时间: |
|
| 查看次数: |
5265 次 |
| 最近记录: |