node.js - 如何改进我的 Dockerfile 以完美地为 Angular 应用程序创建 Docker 映像?
问题描述
我很困惑如何为任何类型的 Node.js 或 Angular 应用程序创建 Dockerfile。我做了很多搜索来实现这一点,但我做不到。我不明白下面的 Dockerfile 有什么问题。我该如何改进它?
FROM node:12.18-alpine as build
# set working directory
WORKDIR /usr/src
COPY src/ ./src/
# install and cache app dependencies
COPY package.json /app/package.json
RUN cd src/app && npm install @angular/cli && npm install && npm run build
# # start app
# CMD ng serve --host 0.0.0.0 --port 80 --disableHostCheck true
# generate build
RUN ng build --output-path=dist --configuration=production
############
### prod ###
############
# base image
FROM nginx:1.16.0-alpine
COPY ./nginx-config.conf /etc/nginx/conf.d/default.conf
# copy artifact build from the 'build environment'
COPY --from=build /app/dist /usr/share/nginx/html
# expose port 80
EXPOSE 80
# run nginx
CMD ["nginx", "-g", "daemon off;"]
nginx-config.conf:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
在 Azure 管道中构建后出错:
解决方案
如何改进我的 Docker 文件以完美地为 Angular 应用程序创建 Docker 映像?
我可以通过您的 dockerfile 重现此问题。那是因为您设置了WORKDIR
toWORKDIR /usr/src
并复制package.json
到/app/package.json
. 在这种情况下,文件package.json
将被复制到WORKDIR
,路径应该是:
/usr/src/app/package.json
但是,您使用RUN cd src/app
工作文件夹中的命令,将切换到路径/usr/src/src/app
。这与文件存在的路径不同/usr/src/app
。
因此,要解决此问题,您需要更改命令行:
COPY package.json /app/package.json
至:
COPY package.json ./src/app/package.json
作为测试,我RUN cd src/app && ls
用来列出路径中的文件/usr/src/src/app
:
推荐阅读
- python - 如何使用 TensorFlow 2 数据集从 URL 加载图像
- python - 如何在 Graph Networkx 中找到具有公共节点的边?
- python - 如何将图像添加到电子邮件正文_python
- java - 引用分配如何循环工作?在爪哇
- html - 如何解决 Angular 8 元数据中 require(URL-metadata) 的错误
- ios - iPhone 11 刺激器自动布局约束未按预期工作
- jsp - 如何收集日历期间?
- python - 如何在 python 中将多索引附加到我的数据框?
- javascript - 在 webview 中滚动到具有给定名称属性的 HTML 元素
- android - Android Gradle 插件仅支持 Kotlin Gradle 插件版本 1.3.10 及更高版本