我一直在尝试使用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"
那么,这个错误是否有任何可能的解决方案?
答案 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。