【问题标题】:How to mount jar file to tomcat container如何将jar文件挂载到tomcat容器
【发布时间】:2022-02-23 22:41:00
【问题描述】:

我的项目中有一个文件夹,其中包含 1 个属性文件和 1 个 jar 文件(db-driver)文件。

我需要将这两个文件复制到我的 pod 上的 /usr/local/tomcat/lib 目录。我不确定如何在 kubernetes yaml 文件中实现这一点。下面是我的 yaml 文件,我试图在其中使用 configMap 来实现这一点,但 pod 创建失败并出现错误“configmap references non-existent config key: app.properties”

目标/usr/local/tomcat/lib 已经有其他 jar 文件,所以我尝试使用 configMap 不覆盖整个目录,只添加 2 个特定于我的应用程序的文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcatdeployment
  labels:
    app:  tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app:  tomcat
  template:
    metadata:
      labels:
        app:  tomcat
    spec:
      containers:
        - name: tomcat
          image: tomcat:latest
          imagePullPolicy: IfNotPresent
          volumeMounts:
          - name: appvolume
            mountPath: /usr/local/data
          - name: config
            mountPath: /usr/local/tomcat/lib
            subPath: ./configuration
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
      volumes:
        - name: appvolume
        - name: config
          configMap:
            name: config-map
            items:
              - key: app.properties
                path: app.properties
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: config-map
data:
  key:  app.properties

当前目录结构...

.
├── configuration
│   ├── app.properties
│   └── mysql-connector-java-5.1.21.jar
├── deployment.yaml
└── service.yaml

请分享您对如何实现这一目标的宝贵反馈。

问候。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    请试试这个:

    kubectl create configmap config-map --from-file=app.properties --from-file=mysql-connector-java-5.1.21.jar

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: tomcatdeployment
          labels:
            app:  tomcat
        spec:
          replicas: 1
          selector:
            matchLabels:
              app:  tomcat
          template:
            metadata:
              labels:
                app:  tomcat
            spec:
              containers:
                - name: tomcat
                  image: tomcat:latest
                  imagePullPolicy: IfNotPresent
                  volumeMounts:
                  - name: config
                    mountPath: /usr/local/tomcat/lib/conf
                  ports:
                    - name: http
                      containerPort: 8080
                      protocol: TCP
              volumes:
                - name: config
                  configMap:
                    name: config-map
    

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tomcatdeployment
      labels:
        app:  tomcat
    spec:
      replicas: 1
      selector:
        matchLabels:
          app:  tomcat
      template:
        metadata:
          labels:
            app:  tomcat
        spec:
          containers:
            - name: tomcat3
              image: tomcat:latest
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - name: config
                mountPath: /usr/local/tomcat/lib/app.properties
                subPath: app.properties
              - name: config
                mountPath: /usr/local/tomcat/lib/mysql-connector-java-5.1.21.jar
                subPath: mysql-connector-java-5.1.21.jar
              ports:
                - name: http
                  containerPort: 8080
                  protocol: TCP
          volumes:
            - name: config
              configMap:
                name: config-map
                items:
                - key: app.properties
                  path: app.properties 
                - key: mysql-connector-java-5.1.21.jar
                  path: mysql-connector-java-5.1.21.jar
    

    【讨论】:

    • 在 config-map 中,我们首先为 config-map 定义数据,从我们定义体积部分的地方开始。对于您将从哪里获取此 jar 文件的示例,它将如何进入 config-map 部分?
    【解决方案2】:

    出现此错误是正常的,因为在此卷声明中您提到了该键:app.properties 否则在 configmap 键中:app.properties 所以这里键是键,值是 app.properties 所以你必须在卷中声明更改:

    volumes:
            - name: appvolume
            - name: config
              configMap:
                name: config-map
                items:
                  - key: app.properties
                    path: app.properties
    

    到:

       volumes:
                - name: appvolume
                - name: config
                  configMap:
                    name: config-map
                    items:
                      - key: key
                        path: app.properties
    

    更多信息可以参考这里:add-configmap-data-to-a-volume

    【讨论】:

    • 谢谢@Semah,在此更改之后,我没有看到以前的错误。但看起来这些替换了 /usr/local/tomcat/lib 中的所有内容,并且只保留 app.properties 文件。我想保留图像中的现有文件,并将这个新文件添加到该文件夹​​中。我的配置中是否缺少某些内容?
    • 是的,我认为这一行会导致覆盖 subPath: ./configuration 您应该将 ./configuration 替换为 subPath: configuration
    • 更改 subPath: 配置后也没有工作。我已经添加了我的目录结构,所以你可以看到我想将所有文件从配置文件夹复制到容器中的 /usr/local/tomcat/lib 文件夹。此外,该位置已经存在默认的 tomcat jar,因此不应删除它们。谢谢大家的帮助:)
    • 更改子路径时:配置结果是什么?
    • 它从该目录中删除所有文件并添加 app.properties 文件(但文本为 app.properties)。我添加了我的项目文件夹结构以供参考。所以,我从 root 执行 kubectl create -f deployment.yaml。我正在尝试将这两个文件从配置复制到 docker 路径 /usr/local/tomcat/lib ,而不会覆盖 docker 中该路径中存在的任何现有文件。
    猜你喜欢
    • 1970-01-01
    • 2019-01-13
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多