Docker容器中的Django应用无法找到postgres[英] Django app in Docker container unable to find postgres

本文是小编为大家收集整理的关于Docker容器中的Django应用无法找到postgres的处理方法,想解了Docker容器中的Django应用无法找到postgres的问题怎么解决?Docker容器中的Django应用无法找到postgres问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我在gitlab上有一个Django应用程序,我正在尝试使用gitlab-ci添加CI/CD.我在EC2上启动了一台服务器,并在其上安装了GitLab-runner.

我在项目中添加了.gitlab-ci.yml文件,并推动了最新更改.我可以看到正在运行的管道和依赖项正在安装.但是当脚本试图运行测试时,我会收到这样的错误:

django.db.utils.serationalerror:无法连接到服务器:连接拒绝

是在主机" Localhost"(:: 1)上运行的服务器并接受 端口5432上的TCP/IP连接?

无法连接到服务器:连接拒绝

是在主机" localhost"(127.0.0.1)上运行的服务器,接受 端口5432上的TCP/IP连接?

下面是我的.gitlab-ci.yaml脚本:

image: python:3-jessie

services:
  - postgres:latest

before_script:
  - python -V
  - apt-get -y update
  - apt-get install -y python-dev python-pip
  - pip install --upgrade pip

stages:
  - build

build:
  type: build
  variables:
    DATABASE_URL: postgres://postgres:@postgres:5432/opensys_erp
  script:
  - pip install -r requirements.txt
  - python manage.py test
  only:
  - branches

为什么我的应用程序无法连接到Postgres服务器?

推荐答案

作为您的容器,尝试将Postgres连接到他们自己的本地主机上,这就是为什么您拒绝连接的原因. 127.0.0.1此localhost是Django application容器的本地主机.要使用Localhost与后者连接,您需要链接您的Docker容器.

Docker还具有一个链接系统,该系统允许您将多个容器链接在一起,并将连接信息发送到另一个容器.链接容器时,可以将有关源容器的信息发送到收件人容器.

服务如何链接到工作

总结一下,如果将mySQL作为服务添加到应用程序中,则图像将用于创建一个链接到工作容器的容器.

在主机名下可以访问MySQL的服务容器 mysql.因此,为了访问您的数据库服务,您必须 连接到名为MySQL的主机,而不是套接字或本地主机.

在我发布与同样的问题的详细答案之前的一天,您也检查了一下.

您可以检查一些链接

https://docs.docker.com/network/network/links/links/

/using_docker_images.html

https://docs.gitlab.com/CE/ci/docker/using_docker_images.html#accessing-the-services

其他推荐答案

如果我解释了 docs 正确,您应在postgres用户之后删除::

postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]

,您的字符串将是:

postgres://postgres@postgres:5432/opensys_erp

本文地址:https://www.itbaoku.cn/post/1764129.html