【发布时间】: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