gpt4 book ai didi

django - 如何从 docker 容器中访问主机上的 postgres 数据库?

转载 作者:行者123 更新时间:2023-11-29 11:51:29 25 4
gpt4 key购买 nike

我有一个带有 django 项目的 docker-compose 文件,它试图使用位于主机上的数据库。

现在我的 Dockerfile 是:

FROM python:3-slim

ENV PYTHONUNBUFFERED 1

RUN mkdir /code.
WORKDIR /code
ADD . /code/
RUN pip install -r requirements.txt
RUN export dockerhost=$(docker-machine ip)

docker-compose.yml:

version: "2"

networks:
workernetwork:
webnetwork:

services:
static:
volumes:
- /static:/static
- /media:/media
image: alpine:latest

web:
build: .
command: bash -c "SECRET_KEY=temp_value python /code/manage.py collectstatic --noinput && python /code/manage.py migrate && /code/run_gunicorn.sh"
volumes:
- .:/code
volumes_from:
- static
env_file:
- secrets.env
ports:
- 443:443
networks:
- webnetwork
extra_hosts:
- "dockerhost:${dockerhost}"

DATABASES 在 settings.py 中:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'revolution',
'USER': get_env_setting('POSTGRES_USER'),
'PASSWORD': get_env_setting('POSTGRES_PASSWORD'),
'HOST': 'dockerhost',
'PORT': 5432,
}
}

我做错了什么?

感谢关注!

最佳答案

最后用 docker volume 解决了:

首先,创建卷:

docker volume create --name=coredb

docker-compose.yml

version: "2"

services:
...
web:
build:
context: .
command: bash -c "python /code/manage.py collectstatic --noinput && python /code/manage.py migrate && /code/run_gunicorn.sh"
volumes:
- /static:/data/web/static
- /media:/data/web/media
- .:/code
env_file:
- ../.env
depends_on:
- db
db:
restart: always
image: postgres
env_file:
- ../.env
volumes:
- pgdata: /var/lib/postgresql/data

volumes:
pgdata:
external:
name: coredb

.env 变量:

POSTGRES_DB={hidden}
POSTGRES_USER={hidden}
POSTGRES_PASSWORD={hidden}

重要:您需要通过 docker exec -it backend_db_1 bash 和以下 this 手动创建数据库和用户Install Django within a Virtual Environment 一章的说明

关于django - 如何从 docker 容器中访问主机上的 postgres 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44782101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com