首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >github action docker数据库迁移失败

github action docker数据库迁移失败
EN

Stack Overflow用户
提问于 2021-02-17 05:03:45
回答 1查看 238关注 0票数 0

我正在尝试使用github操作构建CI/CD环境。

下面的脚本帮助我构建docker镜像,但返回错误

代码语言:javascript
复制
django.db.utils.OperationalError: could not connect to server: Operation timed out
    Is the server running on host "db-postgresql-nyc1.b.db.ondigitalocean.com" (157.230.224.47) and accepting
    TCP/IP connections on port 23052?

localhost可以成功地迁移数据库而不会出现任何错误。但是,当我使用github操作时,它失败了。

也许我应该尝试从数字海洋或github操作防火墙?如果你有任何建议,请让我知道。

代码语言:javascript
复制
name: Python application

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: docker login
      env:
        DOCKER_ID: ${{ secrets.DOCKER_USER }}
        DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} 
      run: |
        docker login -u $DOCKER_ID -p $DOCKER_PASSWORD
    - name: docker build
      run: |
        docker rmi --force "dummy/dummy-community:latest"
        docker build -t polls . 
    - name: docker migrate
      run: |
        docker run --env-file env polls sh -c "python manage.py makemigrations && python manage.py migrate"
    - name: docker tag image
      run: |
        docker tag polls:latest dummy/dummy-community:latest
    - name: docker push
      run: |
        docker push dummy/dummy-community:latest
    - name: kubectl deploy
      run: |
        kubectl delete pods polls-app
        kubectl get deploy polls-app
EN

回答 1

Stack Overflow用户

发布于 2021-02-17 05:43:19

启动Postgres和Django之间经常会出现竞争情况。当Postgres容器启动时,该容器被列为已启动,但在幕后,实际的数据库服务器进程仍在启动。当Django容器启动时,它立即尝试连接到数据库,但失败了。

通常情况下,可以采取以下两种操作之一:

  1. 使用较小的Postgres图像。使用更少的内容,数据库服务器进程启动得更快。有时,postgres:12-alpine (或符合您的版本要求的<version>-alpine镜像)会足够快地启动postgres,以便Django可以在启动时访问它。但是,这仍然是一场比赛,您可能会遇到相同的错误

在转移到makemigrations之前,

  1. 编写一个轮询脚本来确认Postgres已启动并接受查询

代码语言:javascript
复制
#!/bin/bash

while :; do
  # Check if database is taking queries
  psql -Atc "SELECT 1" -p <port> -U <user> <database>
  if [[ $? -eq 0 ]]; then
    break
  fi
  echo "Database is not started, waiting and trying again
  sleep 0.5 # or however long you want
done

# broke out of the while loop, proceed to migration
python manage.py makemigrations && python manage.py migrate

当然,上面的代码片段是一个基本的检查--您可能希望编写一些更健壮的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66232137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档