Django 无法连接到服务器:连接被拒绝服务器是否在主机上运行;“数据库”;(172.19.0.3)并在端口5432上接受TCP/IP连接?

Django 无法连接到服务器:连接被拒绝服务器是否在主机上运行;“数据库”;(172.19.0.3)并在端口5432上接受TCP/IP连接?,django,docker,docker-compose,continuous-integration,gitlab-ci,Django,Docker,Docker Compose,Continuous Integration,Gitlab Ci,我试图在Gitlab CI上运行Django测试,但出现了这个错误,上周它运行得很好,但突然在测试运行期间出现了这个错误 django.db.utils.OperationalError:无法连接到服务器:连接被拒绝 服务器是否在主机“数据库”(172.19.0.3)上运行并接受 端口5432上的TCP/IP连接 我的gitlab ci文件如下所示 image: docker:latest services: - docker:dind variables: DOCKER_HOST:

我试图在Gitlab CI上运行Django测试,但出现了这个错误,上周它运行得很好,但突然在测试运行期间出现了这个错误

django.db.utils.OperationalError:无法连接到服务器:连接被拒绝 服务器是否在主机“数据库”(172.19.0.3)上运行并接受 端口5432上的TCP/IP连接

我的gitlab ci文件如下所示

image: docker:latest
services:
  - docker:dind

variables:
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2

test:
  stage: test
  image: tiangolo/docker-with-compose
  script:
    - docker-compose -f docker-compose.yml build
    - docker-compose run app python3 manage.py test
我的docker撰写如下:

version: '3'
volumes:
  postgresql_data:
services:
  database:
    image: postgres:12-alpine
    environment:
        - POSTGRES_DB=test
        - POSTGRES_USER=test
        - POSTGRES_PASSWORD=123
        - POSTGRES_HOST=database
        - POSTGRES_PORT=5432
    volumes:
        - postgresql_data:/var/lib/postgresql/data
    healthcheck:
        test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -e \"SHOW DATABASES;\""]
        interval: 5s
        timeout: 5s
        retries: 5
    ports:
        - "5432"
    restart: on-failure

  app:
    container_name: proj
    hostname: proj
    build:
      context: .
      dockerfile: Dockerfile
    image: sampleproject
    command: >
      bash -c "
        python3 manage.py migrate  &&
        python3 manage.py wait_for_db  &&
        gunicorn sampleproject.wsgi:application -c ./gunicorn.py
      "
    env_file: .env
    ports:
      - "8000:8000"
    volumes:
        - .:/srv/app
    depends_on:
       - database
       - redis

那么为什么它拒绝连接呢?我不知道,它在上周工作。

你能做一个
docker容器ls
并检查数据库的容器名称是否为“数据库”吗?
您已经跳过了为该容器设置
容器\u名称
,这可能是因为docker没有使用服务的默认名称创建它,即“数据库”,因此,DNS无法在网络中的该名称下找到它。

您能否执行
docker容器ls
并检查数据库的容器名称是否为“数据库”?
您已跳过设置该容器的
容器名称
,这可能是因为docker没有使用服务的默认名称(即“数据库”)创建该容器,因此DNS无法在网络中的该名称下找到它。

重新启动服务器。当我运行多个使用postgres的容器时,我会在Mac和Linux上不时遇到类似的错误。

重新启动服务器。当我运行多个使用postgres的容器时,我在Mac和Linux上不时会遇到类似的错误。

不确定这对您的情况是否有帮助,但我在docker compose上遇到了同样的问题。对我来说,解决这个问题的办法是明确指定postgres的主机名

services:
  database:
    image: postgres:12-alpine
    hostname: database
    environment:
        - POSTGRES_DB=test
        - POSTGRES_USER=test
        - POSTGRES_PASSWORD=123
        - POSTGRES_HOST=database
        - POSTGRES_PORT=5432

    ...

不确定这对你的情况是否有帮助,但我对docker compose也有同样的问题。对我来说,解决这个问题的办法是明确指定postgres的主机名

services:
  database:
    image: postgres:12-alpine
    hostname: database
    environment:
        - POSTGRES_DB=test
        - POSTGRES_USER=test
        - POSTGRES_PASSWORD=123
        - POSTGRES_HOST=database
        - POSTGRES_PORT=5432

    ...

它在本地工作很好。但如何在Gitlab上检查这个问题呢?因为我对数据库的服务是“数据库”,所以我在数据库中使用它,它在本地运行良好。但如何在Gitlab上检查这个问题呢?由于我为数据库提供的服务是“数据库”,所以我在数据库中使用它。在迁移之前,是否需要
等待\u db
?数据库容器真的启动了吗?@DavidMaze不确定,先生。我如何检查gitlb ci容器是否已启动?因为我只是在运行测试?在迁移之前,是否需要
等待\u db
?数据库容器真的启动了吗?@DavidMaze不确定,先生。我如何检查gitlb ci容器是否已启动?因为我正在运行测试?如何重新启动gitlab CI?如何重新启动gitlab CI?