如何从Docker容器内部访问主机上的PostgreSQL数据库?

3

我有一个包含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}"

在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,
    }
}

我做错了什么?

谢谢关注!

1个回答

0

最终通过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的说明操作,直到在虚拟环境中安装Django章节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接