如何在docker中共享本地Postgres数据库?
如何在docker中共享本地Postgres数据库?
这个问题已经有了答案:
我有一个Django项目,使用PostgreSQL数据库。我需要在Docker容器中使用我的本地数据库。如何与Docker容器共享机器的本地主机? 我的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 = '*'
到postgresql.conf文件中,下面是我的pg_hba.conf文件:
# 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 |
谁能帮我? 请!
admin 更改状态以发布 2023年5月24日
看起来 os.environ.get('pghostname')
指向的是 127.0.0.1
,其中 127.0.0.1
指的是这个容器,而不是主机数据库。由于错误是
Is the server running on host "127.0.0.1" and accepting
要连接主机数据库,您需要使用 Mac 和 Windows 的特殊 DNS host.docker.internal
。数据库主机应该是
'HOST': "host.docker.internal"
要连接主机数据库,或者如果您在 Linux 上,则应该是
'HOST': "HOST_IP"
您可以从 ifconfig
中获取主机 IP。