【问题标题】:COPY in Dockerfile works in docker but not in kubernetesDockerfile 中的 COPY 在 docker 中有效,但在 kubernetes 中无效
【发布时间】:2021-04-16 21:38:18
【问题描述】:

我正在尝试将一个简单的 HTML 文件部署到 Kubernetes 并使用 Nginx 作为测试来托管它。我在复制我的网站文件时遇到了问题。

Dockerfile

FROM nginx:alpine
COPY ./public /usr/share/nginx/html/

当我构建这个图像并使用docker run 运行它时,网站加载正常,我看到我的 index.html 文件位于我的公共目录中。如果我尝试使用 kubectl 在 pod 中运行它,文件不会被复制。当我访问我的站点时,我看到的只是默认的 Nginx 欢迎页面。我不确定为什么会这样。该集群托管在 AWS EKS 上,因此它对所有文件都是远程的。这与我在 GitLab 上构建和托管我的 docker 映像相同。

图像构建没有任何错误,正如我所说,在 vanilla docker 中运行时效果很好。只有当我迁移到 Kubernetes 时才会遇到问题。

我已经公开了这个项目,所以你们可以看到我可能在我的问题中遗漏的所有抽象。

https://gitlab.com/k8group/k8site

感谢任何帮助。

最好的问候, 艾迪。

【问题讨论】:

  • 可能有多种原因导致这种情况,但是让我们开始,如果您将 shh 放入该容器中,您是否在您指定的位置看到您的 html 文件?如果不是,但您确实在本地看到它,听起来不像您将相同的图像拉入集群。如果您确实看到它可能是多件事,您是否在某处设置了负载均衡器,也许入口设置是否正确您是否有服务发现工作?在我的情况下,负载均衡器指向的节点由于私有仓库的身份验证问题而没有拉下图像而失败。
  • 我在打开 shell 时看到的是,在 docker 上文件在那里,在 pod 上,文件是默认文件:reference。从外观上看,拉取的图像是相同的图像。他们俩都报告说图像是从registry.gitlab.com/k8group/k8site:master 提取的。我试图通过将此注释添加到入口ingress.kubernetes.io/cache-enable: "false" 来禁用入口中的缓存,但我不确定我是否正确地这样做。

标签: docker nginx kubernetes gitlab-ci


【解决方案1】:

我知道是否只是这个,但快速浏览一下,我可以说你的入口模板中的键值必须指向服务端口,而不是 pod 容器端口。检查下面的正确配置:

    kind: Service
    apiVersion: v1
    metadata:
      name: k8site
    spec:
      selector:
        app: k8site
      ports:
        - port: 8080
          targetPort: 80
    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      annotations:
        ingress.kubernetes.io/cache-enable: "false"
      name: k8site-ingress
    spec:
      rules:
      - host: prod.pepefanclub.com
        http:
          paths:
          - backend:
              serviceName: k8site
              servicePort: 8080 <--- this must be the service port, that is 8080

【讨论】:

  • 我这样做了,但它似乎仍然显示同一个站点。感谢您指出这一点。
【解决方案2】:

所以看起来这是一个图像未被拉取的情况。我将提交标签从 master 更改为 hash,网站开始工作。

更改我的 ci 管道中的变量

IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG

IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

感谢@EugeneDW 为我指明了正确的方向。

【讨论】:

  • 没问题快乐编码?
  • @IdecEddy 这些变量有何不同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 2023-02-25
  • 2021-03-04
  • 2015-07-21
  • 2015-08-03
  • 2015-11-13
相关资源
最近更新 更多