404 when I curl a kubernetes tomcat service

wwtsj6pe  于 2023-06-05  发布在  Kubernetes
关注(0)|答案(3)|浏览(233)

你好,我正在尝试部署一个简单的Tomcat服务。详情如下:

  1. minikube版本:v1.8.1
    操作系统:Mac
    3.deployment.yaml文件(我在yaml文件的目录下)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
spec:
  selector:
    matchLabels:
      app: tomcat
  replicas: 1
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:9.0
        ports:
        - containerPort: 8080

4.用于部署和公开服务的命令

kubectl apply -f deployment.yaml

kubectl expose deployment tomcat-deployment --type=NodePort

minikube service tomcat-deployment --url

curl [URL]

我得到一个404当我 curl 的URL。我不确定是部署.yaml文件还是一些minikube设置有问题。

envsm3lx

envsm3lx1#

您应该设置target-Port,在您的情况下将是8080
所有这些都在Set up Ingress on Minikube with the NGINX Ingress Controller上得到了很好的解释
1.使用以下命令创建展开:
kubectl run web --image=gcr.io/google-samples/hello-app:1.0 --port=8080

  • 输出:

deployment.apps/web created
1.公开展开:
kubectl expose deployment web --target-port=8080 --type=NodePort

  • 输出:

service/web exposed
1.验证服务是否已创建且在节点端口上可用:
kubectl get service web

  • 输出:
NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
   web       NodePort   10.104.133.249   <none>        8080:31637/TCP   12m

1.通过NodePort访问服务:
minikube service web --url

  • 输出:

http://172.17.0.15:31637
如果这没有帮助,请检查tomcat pod的日志,查看它是在端口8080上启动的。
09-Mar-2020 13:36:00.157 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [“http-nio-8080”]
您还可以通过首先定位docker容器docker ps并使用docker logs <container-name>从其中获取日志来检查docker日志

5anewei6

5anewei62#

Tomcat镜像在webapps.dist文件夹中带有默认的预安装应用程序(ROOT,manager...),以避免它们在容器启动时默认加载(https://github.com/docker-library/tomcat/issues/183)。例如,您可以简单地将webapps.dist重命名为webapps和(通过例如kubectl exec<pod_name>-- bash),并且在部署应用程序之后,404应该不再发生。

xpszyzbs

xpszyzbs3#

上面萨拉的回答为我指明了正确的方向。复制文件可以正常工作,但这需要重新启动tomcat服务,以恢复更改。我必须在部署yaml上使用'cp -r',如下所示:

spec:
      containers:
      - name: tomcat
        image: tomcat
        ports:
        - containerPort: 8080
        volumeMounts:
          - mountPath: /usr/local/tomcat/webapps.dist/manager/META-INF/context.xml
            name: tomcat-configmap
            subPath: context1
          - mountPath: /usr/local/tomcat/webapps.dist/host-manager/META-INF/context.xml
            name: tomcat-configmap
            subPath: context2
            mountPath: /usr/local/tomcat/conf/tomcat-users.xml
            name: tomcat-configmap
            subPath: tomcat-users
        command: ["/bin/bash"]
        args: [ "-c", "cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/ && catalina.sh start; sleep inf" ]
      volumes:
        - name: tomcat-configmap
          configMap:
            name: tomcat-configmap

相关问题