Django 如何从docker容器中访问主机上的postgres数据库?
我有一个docker compose文件和django项目,试图使用位于主机上的数据库 现在我的Dockerfile是:Django 如何从docker容器中访问主机上的postgres数据库?,django,postgresql,docker,docker-compose,Django,Postgresql,Docker,Docker Compose,我有一个docker compose文件和django项目,试图使用位于主机上的数据库 现在我的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: v
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}"
数据库
在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,
}
}
我做错了什么
谢谢注意 我也有同样的问题。问题是netwrok之间的连接被阻塞。我通过创建一个网桥名称的网络来修复它:
docker network create \
--driver bridge \
--opt "com.docker.network.bridge.name"="docker_webnetwork" \
webnetwork
我正在使用UFW作为我的防火墙。因此,允许在我创建的网络上连接到postegres端口
sudo ufw allow in on docker_webnetwork to any port 5432
然后,您可以使用webnetwork连接到主机的postgresql
要获取主机ip,我添加:
export DOCKERHOST=$(ip route | awk '/^default via /{print $3}')
在需要访问数据库的服务的命令中。最终通过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
手动创建数据库和用户,并遵循说明,直到在虚拟环境中安装Django
章节