问题
错误图片
Flyway Job Error
我目前正在尝试使用flyway在postgres中执行迁移。我有一种感觉,初始化脚本是无法找到基于这个错误消息。不太确定我错过了什么,因为在使用Docker容器时,init脚本工作正常。
任何帮助将不胜感激解决这个问题。
我尝试过:
1.到目前为止,我已经尝试在作业中使用连接字符串,看看是否是连接问题。
1.然后,我尝试使用配置Map与初始化SQL脚本内,希望有脚本可见的迁移。在这方面运气不太好。我已经附上了我为这种方法找到的例子。Migrations with ConfigMap for init sql scripts
我有一些更多的研究链接,我发现,但他们不太适合或与我的问题工作,并不值得注意或过时。
Code/Kubernetes设置
以下是我目前的设置:
旁注:我使用kind在本地拉取我的docker镜像并创建集群,我将在最后附加我的docker compose和docker文件。
航路设置
我在Kubernetes中使用了Flyway as a Job,其结构如下:
Flyway作业文件
apiVersion: batch/v1
kind: Job
metadata:
name: flyway-migration-job
spec:
template:
spec:
containers:
- name: flyway
image: flyway/flyway:6.3.1
command: ["flyway -url=jdbc:postgresql://postgres-master:5432/wallet -user=test_user -password=testuser1234 -connectRetries=60 migrate"]
restartPolicy: Never
backoffLimit: 1
Postgres设置
Postgres部署文件:
此作业使用postgres,我已经创建了一个部署使用:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-master
labels:
app: postgres-master
spec:
replicas: 1
selector:
matchLabels:
app: postgres-master
template:
metadata:
labels:
app: postgres-master
spec:
containers:
- name: postgres-master
image: postgres:12
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: wallet
- name: POSTGRES_USER
value: test_user
- name: POSTGRES_PASSWORD
value: testuser1234
Postgres服务文件
然后我使用这个Postgres服务公开了Postgres pod:
apiVersion: v1
kind: Service
metadata:
name: postgres-master
labels:
app: postgres-master
spec:
type: NodePort
ports:
- protocol: TCP
port: 5432
targetPort: 5432
selector:
app: postgres-master
节点设置
我还有一个连接到数据库pod的节点部署,我已经确认我已经能够使用主机名postgres-master(pod名称),上述登录信息和端口5432连接到数据库。
节点部署文件
为了完整起见,我已经附加了节点部署文件,但它可以工作。
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-deployment
labels:
app: node-deployment
spec:
replicas: 3
selector:
matchLabels:
app: node-deployment
template:
metadata:
labels:
app: node-deployment
spec:
containers:
- name: node
image: wallet-api-20_web:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
env:
- name: PG_HOST
value: "postgres-master.default"
Docker设置
Docker compose
然后我有我的docker compose文件,我用它来构建我的图像:侧不-所有的docker图像一起工作,包括迁移之前,我开始添加Kubernetes。
version: '3.5'
services:
web:
build:
dockerfile: ./Dockerfile
container_name: wallet-api-web
depends_on:
- flyway
ports:
- "8080:8080"
postgres-db:
build:
dockerfile: ./utils/db.Dockerfile
container_name: postgres-db
environment:
POSTGRES_PASSWORD: testuser1234
POSTGRES_USER: test_user
POSTGRES_DB: wallet
image: postgres:12
ports:
- "5432:5432"
restart: always
flyway:
command: -url=jdbc:postgresql://db:5432/wallet -user=test_user -password=testuser1234 -connectRetries=60 migrate
container_name: flyway-migrations
depends_on:
- db
image: flyway/flyway:6.3.1
volumes:
- ${PWD}/migrations/sql:/flyway/sql
Postgres Dockerfile
下面是我的postgres的dockerfile:
FROM postgres:13
ENV POSTGRES_DB wallet
节点dockerfile
FROM node:15
ENV NODE_ENV=production
WORKDIR /app
# Copying the package json first enables caching.
COPY ["package.json", "package-lock.json*", "./"]
RUN npm install --production
COPY . .
RUN npm run build
ENTRYPOINT npm run start
Flyway迁移脚本
这是我唯一的迁移脚本,在迁移到Kubernetes之前它一直在工作。
CREATE TABLE transaction_events (
transaction_version int,
transaction_type VARCHAR(200),
coins int,
transaction_id VARCHAR(500),
wallet_id VARCHAR(500)
)
任何帮助都将不胜感激,我有一种感觉,这可能是我错过的小东西。
如果需要更多的信息,请让我知道。
请随意添加任何问题,我会尽我所能提供进一步的背景。
谢谢
1条答案
按热度按时间pgpifvop1#
我怀疑你打电话给
command
的方式是问题所在。必须是command: ["flyway", "-url=jdbc:postgresql://postgres-master:5432/wallet", "-user=test_user", "-password=testuser1234", "-connectRetries=60 migrate"]
另外,我认为你不需要使用
command
。您可以使用args
代替,因为您还使用了在图像入口点中指定的命令。args: ["-url=jdbc:postgresql://postgres-master:5432/wallet", "-user=test_user", "-password=testuser1234", "-connectRetries=60 migrate"]
无论如何都应该工作