如何在Docker容器内访问主机上的postgres数据库?

我有一个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, } } 

我在做什么错?

请注意!

我遇到过同样的问题。 问题是networking之间的连接被阻塞。 我通过创build一个网桥名称来解决它:

 docker network create \ --driver bridge \ --opt "com.docker.network.bridge.name"="docker_webnetwork" \ webnetwork 

我使用UFW作为我的防火墙。 所以允许我创build的networking连接到postegres端口。

 sudo ufw allow in on docker_webnetwork to any port 5432 

然后你可以使用networking连接到你的主机的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 

.envvariables:

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

重要提示:您需要通过docker exec -it backend_db_1 bash手动创build数据库和用户,并按照说明操作,直到Install Django within a Virtual Environment章节中Install Django within a Virtual Environment