docker - 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;"
如果需要任何其他信息,我会尽力提供。
解决方案
检查 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
推荐阅读
- bison - 这个语法有什么问题?
- excel - 混搭资源页面阅读器不可用 - 错误
- python - 在 PyQt5 中动态更改 GUI 元素?
- automation - 如何在单元格中插入公式?
- c# - 'collection[Edm.String(Nullable=True,DefaultValue=,MaxLength=,Unicode=,FixedLength=)]' 类型的值无法转换为字符串
- google-apps-script - 多列上的 Google 表格自动日期和时间戳
- c# - 如何在 Asp.Net Core 2.0.1 中配置用户密码?
- postgresql - PostgreSQL Insert into with case and concat
- reactjs - 传递道具 React Router
- android - 运行时找不到属性的资源标识符