Django对接Kong API的Docker配置问题及数据库迁移报错求助
毕业设计部署问题:Kong数据库迁移报错及配置文件修正
问题概述
做毕业设计部署项目时,配置docker-compose.yml和Dockerfile遇到问题,同时出现Kong数据库迁移报错,需解决报错并修正配置。
报错信息
nginx: [error] init_by_lua error: /usr/local/share/lua/5.1/kong/cmd/utils/migrations.lua:16: Database needs bootstrapping or is older than Kong 1.0. To start a new installation from scratch, run 'kong migrations bootstrap'. To migrate from a version older than 1.0, migrated to Kong 1.5.0 first. If you still have 'apis' entities, you can convert them to Routes and Services using the 'kong migrations migrate-apis' command in Kong 1.5.0. stack traceback: [C]: in function 'error' /usr/local/share/lua/5.1/kong/cmd/utils/migrations.lua:16: in function 'check_state' /usr/local/share/lua/5.1/kong/init.lua:562: in function 'init' init_by_lua:3: in main chunk
相关配置文件
Dockerfile
FROM python:3.10 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt EXPOSE 8000 CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
docker-compose.yml
version: '3.9' services: kong-database: image: postgres:latest container_name: kong-database restart: always ports: - 15432:5432 networks: - default volumes: - db:/var/lib/postgresql/data environment: - POSTGRES_DB=kong - POSTGRES_USER=kong - POSTGRES_PASSWORD=kong kong: image: kong:latest container_name: kong restart: always ports: - 18000:8000 - 18443:8443 - 127.0.0.1:8001:8001 - 18444:8444 links: - kong-database:kong-database networks: - default environment: - LC_CTYPE=en_US.UTF-8 - LC_ALL=en_US.UTF-8 - KONG_DATABASE=postgres - KONG_PG_HOST=kong-database - KONG_PG_USER=kong - KONG_PG_PASSWORD=kong - KONG_CASSANDRA_CONTACT_POINTS=kong-database - KONG_PROXY_ACCESS_LOG=/dev/stdout - KONG_ADMIN_ACCESS_LOG=/dev/stdout - KONG_PROXY_ERROR_LOG=/dev/stderr - KONG_ADMIN_ERROR_LOG=/dev/stderr - KONG_ADMIN_LISTEN=0.0.0.0:18001, 0.0.0.0:18444 ssl konga: image: pantsel/konga container_name: kong-konga restart: always ports: - 1337:1337 networks: - default volumes: - data:/app/kongadata links: - kong:kong environment: - NODE_ENV=production networks: default: driver: bridge volumes: db: driver: local data: driver: local
settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'kong', 'USER': 'kong', 'PASSWORD': 'kong', 'HOST': '127.0.0.1', 'PORT': '15432', } }
解决方法
1. Kong数据库迁移报错处理
报错原因是新创建的PostgreSQL数据库没有Kong所需的表结构,需初始化数据库:
- 停止Kong容器:
docker-compose stop kong - 执行数据库初始化命令:
docker-compose run --rm kong kong migrations bootstrap - 重新启动Kong容器:
docker-compose up -d kong
2. 配置文件修正点
docker-compose.yml 修正
- 移除无用配置:删除Kong服务环境变量中的
KONG_CASSANDRA_CONTACT_POINTS=kong-database,当前使用PostgreSQL,Cassandra配置无意义。 - 同步Admin端口配置:当前Kong的
KONG_ADMIN_LISTEN设置为0.0.0.0:18001,但端口映射是127.0.0.1:8001:8001,二者不一致,需统一:
方案一:修改环境变量为KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl,保持与端口映射的8001端口一致。
方案二:修改端口映射为- 18001:8001,与环境变量的18001端口匹配。 - 替换links为depends_on:
links已被Docker Compose弃用,改为depends_on确保服务启动顺序:
Kong服务添加:
Konga服务添加:depends_on: - kong-databasedepends_on: - kong
Dockerfile 修正
当前Dockerfile未复制项目代码,容器启动会找不到manage.py,需添加复制代码的步骤:
FROM python:3.10 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . # 新增:复制项目所有代码到容器内 EXPOSE 8000 CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
Django settings.py 可选优化
如果后续将Django服务加入docker-compose网络,需将数据库HOST改为kong-database(容器间通过服务名通信,无需端口映射),配置如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'kong', 'USER': 'kong', 'PASSWORD': 'kong', 'HOST': 'kong-database', 'PORT': '5432', } }
内容的提问来源于stack exchange,提问作者wanx
相关产品推荐
相关产品推荐

