【发布时间】:2021-02-14 01:40:46
【问题描述】:
我尝试了很多方法来解决这个问题,但都不起作用。 我有一个 Angular 应用程序,我使用以下代码创建了一个 Dockerfile:
FROM node:latest AS ng-builder
RUN mkdir -p /app
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
RUN $(npm bin)/ng build --prod
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=ng-builder /app/dist/sca-front /usr/share/nginx/html
EXPOSE 80
我的应用程序在运行“ng s”时运行良好。但是当我在 Docker 上创建图像时,它不起作用。我没有代理,没有 vpn,互联网连接良好...
显示这些错误/警告:
npm notice
npm notice New patch version of npm available! 7.0.3 -> 7.0.7
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v7.0.7>
npm notice Run `npm install -g npm@7.0.7` to update!
npm notice
npm ERR! code ERR_SOCKET_TIMEOUT
npm ERR! errno ERR_SOCKET_TIMEOUT
npm ERR! request to https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz failed, reason: Socket timeout
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-11-01T01_24_40_819Z-debug.log
由于 Angular 的版本,我尝试调用“RUN npm RUN npm install -g npm@7.0.7”......但它看起来像超时。我尝试在 docker 上更改 npm 版本...但它不起作用。
我在一个新的/小项目中尝试了 dockerfile,它正在工作。但在一个更大的项目中......
【问题讨论】:
-
你为什么不在容器外运行
ng build在 shell 脚本中,然后在你的 docker 文件中只使用FROM nginx并复制 angular build 目录到 nginx html。这样,您根本不需要在 docker 中完成节点构建。 -
@Abe 我可以这样做,但在许多语言和技术中,由于 CI/CD 的原因,构建应用程序的好方法。无论如何,谢谢
-
@Ben W,实际上,互联网可以工作,但可能有超时
-
@Dockerizandu 是 CI/CD 的好方法,但是您需要可重复的构建。复制镜像中的 package.json 和 package-lock.json 并尝试使用
npm ci而不是npm install。