【问题标题】:Kubernetes pod fails to deploy; docker image is missing/misplacing a file?Kubernetes pod 部署失败; docker 图像丢失/放错文件?
【发布时间】:2018-06-30 21:17:17
【问题描述】:

我正在尝试通过 Google Cloud Platform 了解有关 Kubernetes 的方法。我有一个基于 Vue 的小型应用程序,使用以下 Dockerfiledocker-compose.yml 在本地工作。

在本地构建和启动此项目效果很好。但是,当使用kompose up 创建deployment/svc/etc 时。对于这件事,容器无法正确构建。最终它会陷入崩溃循环。

检查日志显示问题是npm 找不到/opt/eyeball/package.json/opt/eyeball/package-lock.json。我很困惑,因为当我构建和推送我的集群最终拉下的映像时,这不是问题——这些文件就在你期望它们基于我的Dockerfile 的地方。知道为什么会发生这种情况吗?

Dockerfile

FROM node:8-alpine
RUN apk --no-cache --update add gzip
RUN mkdir -p /opt/eyeball
ADD ./package.json /opt/eyeball
ADD ./package-lock.json /opt/eyeball
WORKDIR /opt/eyeball
RUN npm install
ADD . /opt/eyeball

docker-compose.yml

version: '3'

networks:
  default:
    external:
      name: overmind

services:
  eyeball:
    image: registry.gitlab.com/souldeux/eyeball:latest
    environment:
      - HOST=0.0.0.0
    ports:
      - "8080:8080"
    volumes:
      - ./:/opt/eyeball
    entrypoint: "npm run dev"

【问题讨论】:

  • 如果删除docker-compose.yml 中的volumes: 块会怎样?这基本上会用您的主机系统上的内容覆盖Dockerfile 中安装的所有内容,我猜您的 Kubernetes 部署不会这样做。我也会删除自定义的 entrypoint: 行,除非你知道部署规范有类似的东西。
  • 成功了,非常感谢。您对entrypoint 的看法也是正确的;它需要更改为command。如果您想将此作为答案发布,我会将其标记为已接受。

标签: docker npm kubernetes google-kubernetes-engine


【解决方案1】:

您需要删除docker-compose.yml 文件中的volumes: 块。

docker-compose.yml 中的 volumes: 块指示 Docker 获取本地目录的内容并将它们挂载到容器中,这会隐藏您在 Dockerfile 中添加的所有内容。当您使用 Kompose 部署它时,它会被转换为 Kubernetes 指令,但由于 Kubernetes 环境没有您的本地开发环境,这会导致部署的容器失败。

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 2018-09-27
    • 1970-01-01
    • 2020-01-10
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多