[英]How to access postgres database on host from within docker container?
我有一個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)
泊塢窗,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
:
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
泊塢窗,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
手動創建數據庫和用戶,並按照此說明操作,直到Install Django within a Virtual Environment
章節中Install Django within a Virtual Environment
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.