首页 > 解决方案 > OpenStack 上的 Docker。npm 在 fetch 之后和生命周期之前卡住

问题描述

背景:目标是将 Angular 网站 docker 化并在 OpenStack 虚拟机上运行。dockerize nmp 需要做很多工作,所以我的同事发现我们使用的这个已经准备好的 docker 镜像。创建 Angular 网站以适应此 docker 所基于的 npm node.js 版本。

问题: 我们在 Windows 计算机上运行的 Ubuntu VM 上开发代码,并且在本地运行良好。当我们尝试在 OpenStack ubuntu VM 上构建 docker 映像时,就会出现问题。我们最初认为这是一个网络问题,但经过一些调查,我们注意到 npm 确实会获取包并获取它们。获取所有包裹后,它只是停止并且没有响应,但这可以通过按CTRL+取消C。在本地 VM 上,它在获取所有包后继续,并对获取的包执行生命周期操作。这永远不会在 Open Stack VM 上完成。

Dockerfile

FROM node:8-alpine

RUN echo http://mirror.yandex.ru/mirrors/alpine/v3.5/main > /etc/apk/repositories; \
    echo http://mirror.yandex.ru/mirrors/alpine/v3.5/community >> /etc/apk/repositories
RUN apk update && apk add nginx

COPY app-gui/package.json app-gui/package-lock.json ./

## RUN npm config set registry https://registry.npmjs.org/ && npm ping [--registry https://registry.npmjs.org/]

RUN npm set progress=false && npm config set depth 0 && npm cache clean --force
RUN npm config set loglevel info 

## Storing node modules on a separate layer will prevent unnecessary npm installs at each build
RUN npm i && mkdir /ng-app && cp -R ./node_modules ./ng-app

WORKDIR /ng-app
COPY bletf-gui/ .

#Setup nginx
RUN cat ./nginx/default.conf
COPY app-gui/nginx/default.conf /etc/nginx/conf.d
RUN mkdir -p /usr/share/nginx/html && mkdir -p /run/nginx

CMD sed -i -e 's|\$HOST|'"${API_HOST}"'|g' src/environments/environment.prod.ts && \
    $(npm bin)/ng build --prod && cp -R ./dist/* /usr/share/nginx/html/ && nginx -g "daemon off;"

如果需要任何其他信息,我会尽力提供。

标签: dockernpmopenstacknpm-install

解决方案


检查 Docker 容器内的 MTU 值,并将其与主机 MTU 值进行比较。

ifconfig eth0 | grep mtu

您可以从 Docker daemon config 或在容器级别更改 mtu 的配置以相互匹配

从 Docker 守护进程级别 /usr/bin/dockerd -H fd:// --mtu=1450

在容器级别 docker run -it --cap-add=NET_ADMIN IMAGE_NAME # ifconfig eth0 mtu 1400


推荐阅读