如何从docker容器连接到localhost postgres数据库?

时间:2017-06-23 11:45:37

标签: postgresql docker docker-compose

我已将我的项目配置为docker。我有在非docker期间使用的数据库,现在我想将docker-compose db服务连接到它。但是当我写docker-compose up - 现有数据库未使用时 - 创建了新数据库(我怀疑,docker容器根本看不到数据库)。如果我胡说八道,请告诉我。也许我应该将我的服务器数据库迁移到容器中。

这是我的docker-compose.yml:

services:
  db:
    restart: always
    image: postgres:latest
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_PASSWORD=p@ssw0rd
      - POSTGRES_USER=root
    ports:
      - "5432:5432"
    volumes:
      # We'll mount the 'postgres-data' volume into the location Postgres stores it's data:
      - postgres-data:/var/lib/postgresql/data
  web:
    build: .
    command: bash -c "python manage.py collectstatic --noinput && ./manage.py migrate && ./run_gunicorn.sh"
    volumes:
      - .:/code
      - /static:/static
    ports:
      - 443:443
    depends_on:
      - db
  nginx:
    restart: always
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./misc/nginx.conf:/etc/nginx/conf.d/default.conf
      - /static:/static
    depends_on:
  - web

2 个答案:

答案 0 :(得分:0)

我认为,canonic方法是让数据库引擎在容器中运行,同时将数据存储在持久存储上(将卷映射到硬盘)。 所以我会像你建议的那样在Docker中使用Postgres作为ServerDB。

答案 1 :(得分:0)

如果您只希望应用程序连接到外部数据库,请将其声明为外部主机:

version: '2'
services:

  web:
    build: .
    command: bash -c "python manage.py collectstatic --noinput && ./manage.py migrate && ./run_gunicorn.sh"
    volumes:
      - .:/code
      - /static:/static
    ports:
      - 443:443
    extra_hosts:
      - "db:192.168.1.2"

  nginx:
    restart: always
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./misc/nginx.conf:/etc/nginx/conf.d/default.conf
      - /static:/static
    depends_on:
      - web

请确保您的应用程序将数据库作为数据库引用并替换我放在主机IP中的ip。

问候