angular - 无法为 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
解决方案
好吧,我的 .dockerignore 中有 /dist 文件夹
从中删除它,现在它可以工作了
推荐阅读
- firebase-realtime-database - 如何通过 Zapier 添加到第二个/非默认 Firebase 实时数据库
- spring-boot - 如何修复注入点有以下注释: - @org.springframework.beans.factory.annotation.Autowired(required=true)
- html - 如何使用 css 删除不需要的 html 流程图线
- sql - SQL 查询挑战。除以返回“子查询返回超过 1 个值”的子查询。错误
- spring - 如何将 application.yml 中的属性映射到 JsonNode?(春天)
- javascript - 仅当 cookie 存在时如何获取 URL,否则重定向到不同的 url?
- swift - 分段选择器视图选择具有相同索引的部分中的所有行
- c# - Blazor WASM 页面上的命名空间问题
- javascript - NodeJs的BCrypt包hash()和hashSync()函数的区别
- azure - dotnet 测试用例不遵守解决方案构建顺序