【发布时间】:2021-09-08 20:36:45
【问题描述】:
我的 DockerFile 看起来像:
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
我的 yml 文件看起来像:
apiVersion: apps/v1
kind: Deployment
metadata:
name: imagename
namespace: default
spec:
replicas: 3
selector:
matchLabels:
bb: web
template:
metadata:
labels:
bb: web
spec:
containers:
- name: imagename
image: imagename:1.1
imagePullPolicy: Never
env:
- name: MYSQL_USER
value: root
ports:
- containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
name: imagename
namespace: default
spec:
type: NodePort
selector:
bb: web
ports:
- port: 8080
targetPort: 8080
nodePort: 30001
我已经使用以下命令构建了 docker 映像:
docker build -t dockerimage:1.1 .
并像这样运行 docker 映像:
docker run -p 8080:8080 --network=host dockerimage:1.1
当我在 kubernetes 环境中部署此映像时出现错误:
ERROR com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Exception during pool initialization.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
我也做了端口转发:
Forwarding from 127.0.0.1:13306 -> 3306
有什么建议上面的配置有什么问题吗?
【问题讨论】:
-
您的数据库需要单独的 StatefulSet 和 Service。由于应用程序在某个地方“在集群中”运行,因此它无法返回到您的本地计算机。数据库主机名不会是
localhost,您还需要在 Deployment 中的某个地方进行配置。
标签: spring-boot docker kubernetes dockerfile kubernetes-pod