nginx - minikube + nginx + volumeMount不起作用

标签 nginx docker kubernetes minikube

我正在跟踪发现here的示例。

我只是想了解卷如何与Kubernetes一起工作。我正在本地测试,因此我需要与minikube竞争。我正在尝试使其尽可能简单。我正在使用nginx,并希望它显示从本地主机上的文件夹装入的内容。

环境:
macOS 10.12.5
minikube 0.20.0 + xhvve虚拟机

我使用的是最新的ngninx image from GitHub,没有任何修改。

当我在minikube外部运行docker镜像时,此方法非常有效。

docker run --name flow-4 \
 -v $(pwd)/website:/usr/share/nginx/html:ro \
 -P -d nginx

但是尝试在minikube中运行时,总是访问托管页面时得到404响应。为什么?

这是我的kubernetes配置文件...
kubernets / deploy / deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: flow-4
  name: flow-4
spec:
  replicas: 1
  selector:
    matchLabels:
      run: flow-4
  template:
    metadata:
      labels:
        run: flow-4
    spec:
      containers:
      - image: nginx
        name: flow-4
        ports:
        - containerPort: 80

        volumeMounts:
        - mountPath: /usr/share/nginx/html
          name: flow-4-volume
      volumes:
      - name: flow-4-volume
        hostPath:
          path: /Users/myuser/website

kubernets /部署/svc.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    run: flow-4
  name: flow-4
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: flow-4
  type: NodePort

最后,我像这样运行它:
kubectl create -f kubernetes/deploy/
minikube service flow-4

当它在浏览器中打开时,我没有收到“404 Not Found”消息(在nginx / 1.13.3页脚上方),而不是在网站文件夹中看到index.html页面。

为什么我收到404? Nginx无法看到我已安装文件夹的内容吗? 托管kubernetes的VM是否无法访问我的“网站”文件夹?

我怀疑这是问题所在。我进入kubernetes Pane
kubectl exec -it flow-4-1856897391-m0jh1 /bin/bash

当我查看/ usr / share / nginx / html文件夹时,它为空。如果手动添加index.html文件,则可以在浏览器中看到它。但是Kubernetes为什么不将我的本地驱动器挂载到该文件夹​​?

更新

从我的/ Users / **文件夹装载完整路径似乎有些问题。相反,我使用了“minikube mount”命令将本地文件夹容器index.html挂载到minikube VM中。然后,在另一个终端中,我开始了部署,它可以看到index.html文件就好了。

这是我更新的Deployment.yaml文件,其文件名更清晰,可以更好地说明不同的文件夹及其安装位置...

这是我的kubernetes配置文件...
kubernets / deploy / deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: flow-4
  name: flow-4
spec:
  replicas: 1
  selector:
    matchLabels:
      run: flow-4
  template:
    metadata:
      labels:
        run: flow-4
    spec:
      containers:
      - image: nginx
        name: flow-4
        ports:
        - containerPort: 80

        volumeMounts:
        - mountPath: /usr/share/nginx/html
          name: flow-4-volume
      volumes:
      - name: flow-4-volume
        hostPath:
          path: /kube-website

它使用的是之前文章中的svc.yaml文件。

然后,我从当前目录中运行整个过程。
1. mkdir local-website2. echo 'Hello from local storage' > local-website/index.html3. minikube mount local-website:/kube-website让这个运行...。

在新的终端中,相同的文件夹...
4. kubectl create -f kubernetes/deploy/
一旦所有的 pod 都运行了...
5. minikube service flow-4
您应该在浏览器中看到“来自本地存储的Hello”消息。您可以编辑本地index.html文件,然后刷新浏览器以查看内容更改。

你可以用这个把它拆下来...kubectl delete deployments,services flow-4

最佳答案

您创建的文件夹可能不在kubernetes节点中(它是minikube vm)。

尝试在vm中创建文件夹,然后重试

ssh -i ~/.minikube/machines/minikube/id_rsa docker@$(minikube ip)
mkdir /Users/myuser/website

还看看minikube host mount folder功能

关于nginx - minikube + nginx + volumeMount不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45114910/

相关文章:

nginx - 在 Nginx 中使用 HHVM fastcgi 处理 fastcgi_param

nginx 位置重定向太多重定向

linux - nginx定位规则干扰

django - Nginx+uWsgi+Django 'Permission denied while connecting to upstream'(套接字)

php - 启用Xdebug时如何修复curl_exec调用挂起

kubernetes - 从副本集中的特定容器获取所有日志

Docker Traefik 无法解析 DNS(无法到达服务器并获取证书)

docker - 如何在给定 dockerfile 的情况下启动带有 fleet 的 docker?

kubernetes - 不使用 gcloud 工具将 kubectl 的本地实例连接到 GKE 集群?

docker - 如何彻底阻止容器重启 Kubernetes