首页 > 解决方案 > 无法为 Angular 应用程序创建 docker 映像

问题描述

我正在尝试为 Angular 应用程序创建一个 docker 映像,并设法通过几个玩具项目来做到这一点。

我应该提一下,我在 docker 和 angular 方面的经验都很差。

如果我尝试从项目内的终端运行 npm run build,它会成功创建 dist 文件夹。

据我了解,角度应用程序的 docker 文件由两部分组成,第一阶段用于构建角度应用程序,第二阶段用于实际创建 docker 图像。

我将工作目录设置为:

WORKDIR /usr/src/app

在我设置代理并运行 npm i 和 npm run build 之后。

在我将 npm 构建生成的所有文件复制到路径 /usr/src/app/dist 的最新步骤中,它找不到它并且构建失败:

COPY --from=builder /usr/src/app/dist/ /usr/share/nginx/html

我认为它发生的情况是它无法构建 dist 文件夹或被删除。

如果我尝试在没有最后一个 cmd (COPY) 的情况下运行 Dockerfile 并运行映像,如果我这样做docker exec -it hedgehog-front-end bash并尝试转到 /usr/src/app/ 这是空的。

我从命令行运行的 docker 命令是:

docker build --rm -t hedgehog-fe .

docker run --rm -d --name hedgehog-front-end -p 8888:80/tcp hedgehog-fe

但显然它在构建时失败了

还尝试在没有 --rm 标志的情况下运行构建,也失败了。据我所知, --rm 标志在容器退出后会删除它。

完整的 Dockerfile 是:

FROM node:10-alpine AS builder

WORKDIR /usr/src/app

COPY . .

ENV http_proxy http://192.168.150.242:3128
ENV https_proxy http://192.168.150.242:3128
ENV no_proxy 192.168.151.171,local*,127.0.0.1,172.19.0.3

RUN npm config set proxy http://192.168.150.242:3128
RUN npm config set https-proxy http://192.168.150.242:3128

RUN npm install

RUN npm run build
# also tried with: RUN npm run build  --output-path=/usr/src/app/dist but with little success

RUN pwd

FROM nginx:1.15.8-alpine

RUN rm -rf /usr/share/nginx/html/*

COPY --from=builder /usr/src/app/dist/ /usr/share/nginx/html

码头工人日志如下:

Sending build context to Docker daemon  2.052MB
Step 1/14 : FROM node:10-alpine AS builder
 ---> 9dfa73010b19
Step 2/14 : WORKDIR /usr/src/app
 ---> Using cache
 ---> 75922f5045ea
Step 3/14 : COPY . .
 ---> 8605405dd225
Step 4/14 : ENV http_proxy http://192.168.150.242:3128
 ---> Running in cda1703a159d
Removing intermediate container cda1703a159d
 ---> c89d7918e24f
Step 5/14 : ENV https_proxy http://192.168.150.242:3128
 ---> Running in 51597119b85f
Removing intermediate container 51597119b85f
 ---> 99104b4ceeec
Step 6/14 : ENV no_proxy 192.168.151.171,local*,127.0.0.1,172.19.0.3
 ---> Running in 92c895a8bbab
Removing intermediate container 92c895a8bbab
 ---> 1492be836516
Step 7/14 : RUN npm config set proxy http://192.168.150.242:3128
 ---> Running in a2c0191f05c5
Removing intermediate container a2c0191f05c5
 ---> 6a26b7e44a3a
Step 8/14 : RUN npm config set https-proxy http://192.168.150.242:3128
 ---> Running in 514694cb5b9e
Removing intermediate container 514694cb5b9e
 ---> 65567143581a
Step 9/14 : RUN npm install
 ---> Running in a7d3375c0265
...
...
...
Removing intermediate container a7d3375c0265                                               
 ---> 274f7f2fa911                                                                         
Step 10/14 : RUN npm run build --output-path=/usr/src/app/dist                             
 ---> Running in c302f6ffdcbe                                                              

> hedgehog@0.0.0 build /usr/src/app                                                        
> ng build                                                                                 


Date: 2019-07-25T09:35:46.279Z                                                             
Hash: 91334de448ec3f98f32f                                                                 
Time: 21001ms                                                                              
chunk {main} main.js, main.js.map (main) 86.7 kB [initial] [rendered]                      
chunk {polyfills} polyfills.js, polyfills.js.map (polyfills) 240 kB [initial] [rendered]   
chunk {runtime} runtime.js, runtime.js.map (runtime) 6.08 kB [entry] [rendered]            
chunk {styles} styles.js, styles.js.map (styles) 347 kB [initial] [rendered]               
chunk {vendor} vendor.js, vendor.js.map (vendor) 7.38 MB [initial] [rendered]              
Removing intermediate container c302f6ffdcbe                                               
 ---> e686f496c94c                                                                         
 ---> e686f496c94c
Step 11/14 : RUN pwd
 ---> Running in 7fd1c2612469
/usr/src/app
Removing intermediate container 7fd1c2612469
 ---> 4b5e572e2260
Step 12/14 : FROM nginx:1.15.8-alpine
 ---> b411e34b4606
Step 13/14 : RUN rm -rf /usr/share/nginx/html/*
 ---> Using cache
 ---> 6db439d21fe8
Step 14/14 : COPY --from=builder /usr/src/app/dist/ /usr/share/nginx/html
COPY failed: stat /var/lib/docker/overlay2/d807f3937fc7f50f75a1aad123648730eecfb8c59da3afda634eedf9f0e43c55/merged/usr/src/app/dist: no such file or directory

标签: angulardocker

解决方案


好吧,我的 .dockerignore 中有 /dist 文件夹

从中删除它,现在它可以工作了


推荐阅读