【问题标题】:docker compose cannot connect postgresql database with djangodocker compose 无法用 django 连接 postgresql 数据库
【发布时间】:2018-04-08 22:50:04
【问题描述】:

我的 django 应用程序无法连接到 postgresql。我正在为 django 使用 Dockerfile,并使用带有 postgres 官方图像的 docker-compose 进行构建。

docker-compose.yml

version: '2'

services:
db:
    image: eg_postgresql
    expose:
        - 5432
    environment:
        - POSTGRES_PASSWORD=docker
        - POSTGRES_USER=docker
        - POSTGRES_DB=postgres
web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
        - .:/test_application
    ports:
        - "8000:8000"
    links:
        - "db:db"
    environment:
        - DATABASE_URL=postgres://docker:docker@db:5432/postgres
        - DJANGO_SECRET_KEY=x7-g-xu^h5k%h8860!7ksn=@)7q9frn9_l6tmefvf)y=0)d!uh 

输出:

    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?

docker-compose ps

ubuntu@ip-172-31-7-117:~/dj1/helloworld$ sudo docker-compose ps
  Name                    Command               State           Ports         

----------------------------------------------------------------------------------
helloworld_db_1    /usr/lib/postgresql/9.3/bi ...   Up      5432/tcp              

helloworld_web_1   python3 manage.py runserve ...   Up      0.0.0.0:8000->8000/tcp

在应用设置.py中

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'postgres',
    'USER': 'docker',
    'PASSWORD': 'docker',
    'HOST': 'db',
    'PORT': '5432',
  }
}

我尝试了多种连接方式,但问题都是一样的......

【问题讨论】:

  • 你解决了吗?

标签: django postgresql docker docker-compose


【解决方案1】:

尝试将您的数据库服务的 expose: - 5432 替换为 ports - "5432:5432"

【讨论】:

  • 能否请您在 web 容器中 ping db? @RatulBasak
  • 但还是无法连接到数据库
  • 那么您的错误出现在主机“localhost”(127.0.0.1)上,而您想连接到“db”,所以您的 django 设置错误:)
猜你喜欢
  • 1970-01-01
  • 2018-12-21
  • 2019-09-28
  • 2017-11-18
  • 1970-01-01
  • 2019-11-06
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多