在Google云上部署应用程序时发生纱线错误

我一直在尝试使用Kubernetes在Google云上部署此应用程序( https://github.com/DivanteLtd/open-loyalty/ )。 用于部署此应用程序的实例包含Debian v4.9作为其操作系统。 我们安装了Docker,GCloud,Kubernetes和Kompose作为部署工具。 我为前端和后端构build了两个docker镜像,并将它们链接到docker-compose文件。 现在在前端模型中,我们在前端的Dockerfile中使用了来自docker hub的(node:5)图像。 下面给出的是前端容器的docker文件。

FROM node:5 RUN apt-get update \ && apt-get install -y ruby-full rubygems \ && gem instal sass RUN npm install -g gulp node-sass yarn COPY . /var/www WORKDIR /var/www EXPOSE 3000 CMD npm rebuild node-sass && yarn install && gulp config --prod && gulp compile && gulp prod 

我也尝试使用(节点:6)和(节点:7)作为图像,但错误节点版本仍然v5.12.0和npm版本是v3.8.6。 我也尝试过使用node-yarn( https://hub.docker.com/r/yarnpkg/node-yarn/ )包来专门为这个问题所做的。

 npm info it worked if it ends with ok npm info using npm@3.8.6 npm info using node@v5.12.0 npm info readInstalled object npm info ok /bin/sh: 1: yarn: not found 

一个可能的解决scheme可能是更改Dockerfile中节点的映像版本,但每次都会保持相同的错误。 但是当我用(node:5)在本地机器上执行相同的进程时,它按预期工作。

现在为了运行容器我使用“kompose”运行docker-compose.yml文件并自动部署Pod。 docker-compose.yml文件如下所示。

 backend: container_name: open-loyalty-backend image: gcr.io/open-loyalty/openloyalty_backend links: - elk - db - mail ports: - "8181:80" extra_hosts: - "web:127.0.0.1" frontend: container_name: open-loyalty-frontend image: gcr.io/open-loyalty/openloyalty_frontend ports: - "8182:3000" - "8183:3001" - "8184:3002" elk: container_name: open-loyalty-elk image: elasticsearch:2.2 db: container_name: open-loyalty-postgresql image: postgres environment: - POSTGRES_DB=openloyalty - POSTGRES_USER=openloyalty - POSTGRES_PASSWORD=openloyalty mail: container_name: open-loyalty-mail image: mailhog/mailhog ports: - "8186:8025" 

那么,有没有可能的解决scheme,这个错误?

奇怪的是,它不工作,但纱线安装文件明确说,你不应该通过npm安装。

注意:通常不build议通过npm安装纱线。 在使用基于节点的软件包pipe理器安装Yarn时,软件包未经过签名,而且执行的唯一完整性检查是基本SHA1哈希,这在安装系统范围的应用程序时存在安全风险。

出于这些原因,强烈build议您通过最适合您的操作系统的安装方法来安装Yarn。

在Debian上,安装过程如下所示:

 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update && apt-get install yarn 

如果你愿意运行node:8.4 ,我可以certificate这个方法适用于这个图像。

另外,请确认全局节点模块目录位于PATH中。 否则,它将不能在命令行上访问。 npm root会告诉你这是哪里。

有一件事可能会有所帮助,那就是使用一个ENTRYPOINT脚本,在需要使用它之前立即在运行时安装纱线。

ENTRYPOINT ["./entry.sh"]

如果你不关心使用纱线,而只是想让这个项目起作用,那么就直接用npm吧。