如何从docker容器中访问主机上的postgres数据库?

时间:2017-06-27 13:52:02

标签: django postgresql docker docker-compose

我有一个django项目的docker-compose文件试图使用位于主机上的数据库。

现在我的Dockerfile是:

ExecutorService.scheduleAtFixedRate()

搬运工-compose.yml:

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)
settings.py中的

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}"

DATABASES

我做错了什么?

请注意!

2 个答案:

答案 0 :(得分:0)

我有同样的问题。问题是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}')

在需要访问数据库的服务命令中。

答案 1 :(得分:0)

最后用docker volume解决:

首先,创建音量:

label = Label(canvas, image=image)
...
dnd = DragManager()
dnd.add_dragable(label)
...
root.mainloop()

搬运工-compose.yml

docker volume create --name=coredb

.env变量:

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

重要的: 您需要通过POSTGRES_DB={hidden} POSTGRES_USER={hidden} POSTGRES_PASSWORD={hidden} 并按照this说明手动创建数据库和用户,直到docker exec -it backend_db_1 bash