django - docker 中主机的 localhost 和 postgres 之间的区别

标签 django postgresql docker docker-compose

我正在开发一个 django 应用程序并尝试在 docker 中运行它。我有一个至今无法理解的问题。使用 docker-compose 运行应用程序时,当我使用这些配置时,web 应用程序似乎无法连接到数据库:

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

但是一旦我将主机更改为 postgres,它就可以工作。像这样

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

postgres 和 localhost 之间有什么区别。一种是在没有 docker 的情况下运行并出现问题,而不是在我的 mac 的开发环境中,另一种则相反。

# docker-compose.yml    
version: '3'

    services:
      db:
        image: postgres
        expose: 
          - "5432"
      web:
        build: .
        command: python3 manage.py runserver 0.0.0.0:8000
        volumes:
          - .:/code
        ports:
          - "8000:8000"
        depends_on:
          - db

最佳答案

Docker Compose 实际上添加了所有 linked 的主机名容器相互连接。

在您的计算机上,postgres 数据库实际上在 localhost 中运行,这就是为什么您拥有 localhost 主机名。

在 Compose 中,它在 postgres 容器中运行,主机名为 postgres,这就是您拥有 postgres 主机名的原因。

如果需要,您可以在主机文件中创建一个条目,将 postgres 重定向到 localhost,然后您只需使用 postgres > 无处不在。

关于django - docker 中主机的 localhost 和 postgres 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635352/

相关文章:

java - OpenShift 在线 - 构建时内存不足

rest - 如何从在Docker容器中运行的Confluence服务器启用/访问Confluence API

python - 运行 Django 单元测试会导致南迁移重复表

python - 如何阻止 Celery 在此任务中创建重复的用户?

php - 我可以在 Laravel5 上获取 pluck(lists) 的自定义日期格式吗?

c++ - 使用 pgagent 以编程方式创建作业和计划

ruby-on-rails - 如何使用kubernetes将Rails应用程序部署到Google容器引擎?

python - 用有序相关模型的第一个值注释 QuerySet

Django:分解 View

node.js - 无法连接到 postgres