当前位置: 首页 > 知识库问答 >
问题:

如何与Docker共享本地Postgres数据库?[副本]

轩辕奕
2023-03-14

我有一个django项目与PostgreS数据库。我需要在docker容器中使用我的本地数据库。如何与docker容器共享机器的localhost?My Docker-compose.yml:

  version: '3'
  services:
    web:
      build: ./
      network_mode: "host"
      command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput --i rest_framework && gunicorn orion-amr.wsgi:application --bind 0.0.0.0:8000 --workers=2"
      ports:
        - "${webport}:8000"
        - "${pgport}:${pgport}"
      env_file:
        - ./.env

Django Settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': os.environ.get('pgdatabase'),
        'USER': os.environ.get('pguser'),
        'PASSWORD': os.environ.get('pgpassword'),
        'HOST': os.environ.get('pghostname'),
        'PORT': os.environ.get('pgport'),
    }
}

我添加了

listen_addresses = '*'  
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             0.0.0.0/0               trust
# IPv6 local connections:
host    all             all             ::/0                    trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

现在我有一个错误:

web_1  | django.db.utils.OperationalError: could not connect to server: Connection refused
web_1  |        Is the server running on host "127.0.0.1" and accepting
web_1  |        TCP/IP connections on port 5432?
web_1  |

谁能帮我?求求你!

共有1个答案

石苏燕
2023-03-14

os.environ.get('pghostname')似乎指向127.0.0.1,其中127.0.0.1表示此容器,而不是主机DB。作为错误

Is the server running on host "127.0.0.1" and accepting

要与主机数据库连接,您需要为mac和Windowshost.docker.internal提供特殊的DNS。DB主机应为

'HOST': "host.docker.internal"

要与主机DB连接,或者如果您是在Linux上,那么它应该是

'HOST': "HOST_IP"

您可以从ifconfig获取主机IP。

 类似资料:
  • 我想在启动Postgres Docker映像后创建一个数据库。

  • 另一个尝试: 有没有人用美洲狮成功做到这一点?如果是的话,我错过了什么?感谢您对此问题的帮助!

  • 我有两个docker容器在运行,遵循这里给出的说明:https://github.com/swri-robotics/bag-database。 现在我可以在浏览器中使用:localhost:8080查看数据库,因此它设置正确,运行良好。 我是这样运行的: docker运行-d-p 5432:5432--name bagdb-postgres-v/var/lib/bagdb-postgres:/v

  • 问题内容: 我最近一直在研究Docker和QGIS,并按照本教程中的说明安装了一个容器。 尽管我无法连接到包含我的所有GIS数据的localhost postgres数据库,但一切工作都很好。我认为这是因为我的postgres数据库未配置为接受远程连接,并且已经按照本文中的说明编辑了postgres conf文件以允许远程连接。 尝试连接到在Docker中运行QGIS的数据库时,我仍然收到错误消息

  • 我最近一直在玩Docker和QGIS,并按照本教程中的说明安装了一个容器。 我运行的是Ubuntu 14.04;Postgres 9.3

  • 我有一个用spring boot开发的微服务,它与mongodb连接。在本地运行时,一切正常。当我为我的微服务(而不是mongodb)创建docker容器时,我收到一个错误“连接被拒绝”。我曾在“localhost:27017”和“127.0.0.1:27017”连接到我的mongodb,但这两个都不起作用。我知道问题出在这个地址上,因为docker使用的网络适配器与服务器不同,但我找不到如何配置