在Google云上部署应用程序时出现纱线错误

时间:2017-08-19 18:16:21

标签: node.js docker google-cloud-platform yarnpkg

我一直在尝试使用Kubernetes在Google云上部署此应用程序(https://github.com/DivanteLtd/open-loyalty/)。 用于部署此应用程序的实例包含Debian v4.9作为其操作系统。我们安装了Docker,GCloud,Kubernetes和Kompose作为部署工具。我为前端和后端构建了两个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

我也尝试使用(node:6)和(node: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

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

现在运行我正在使用的容器"组成"它运行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"

那么,这个错误是否有任何可能的解决方案?

1 个答案:

答案 0 :(得分:0)

奇怪的是它没有用,但是纱线安装文档特别说你不应该通过npm安装。

  

注意:通常不建议通过npm安装纱线。什么时候   使用基于节点的包管理器安装Yarn,包不是   签名,执行的唯一完整性检查是一个基本的SHA1哈希,   安装系统范围的应用程序时存在安全风险。

     

出于这些原因,强烈建议您安装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,我可以证明此方法适用于该图片。

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

可能有用的一件事是使用ENTRYPOINT脚本,它将在您需要使用之前立即在运行时安装yarn。

ENTRYPOINT ["./entry.sh"]

如果您不关心使用纱线,并且您只想让项目工作,那么只需使用npm。