【问题标题】:How to expose a docker container to access host database?如何公开 docker 容器以访问主机数据库?
【发布时间】:2019-05-01 09:58:30
【问题描述】:

我目前正在尝试弄清楚如何配置我的docker-compose.yml 以允许网络服务器 (django) 与运行在主机上的 PostgreSQL 数据库进行通信。

该应用在容器外完美运行。

现在我想创建一个容器以获得更好的管理和部署功能。

我试过了,
docker-compose.yml

version: '3'

services:
  web:
    image: myimage
    volumes:
      - .:/appdir
    environment:
      - DB_NAME=test
      - DB_USER=test
      - DB_PASSWORD=test
      - DB_HOST=localhost
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    networks:
      - mynet
networks:
  mynet:

Dockerfile

FROM python:3

ENV PYTHONUNBUFFERED=1 \
    DJANGO_SETTINGS_MODULE=app.settings \
    DEBUG=True \
    SECRET_KEY=akey

WORKDIR /appdir

COPY . /appdir

EXPOSE 8000

RUN pip install -r requirements.txt

但是当我这样做时,我收到以下错误:

web_1  | django.db.utils.OperationalError: could not connect to server: Connection refused
web_1  |        Is the server running on host "localhost" (127.0.0.1) and accepting
web_1  |        TCP/IP connections on port 5432?

谢谢

【问题讨论】:

标签: django database docker docker-compose


【解决方案1】:

localhost 是相对的 - 在 docker 容器内 - localhost(又名 127.0.0.1)指的是容器本身。如果您想连接到您的主机 - 将您的主机真实 IP 设置为 DB_HOST 的容器。

有很多方法可以找到您的主机 ip,例如: 在你的终端运行hostname -I | awk '{print $1}'

【讨论】:

  • 您也可以使用各自 Docker 网络的网关 IP 来引用“真实的”本地主机。
猜你喜欢
  • 2016-12-23
  • 2017-11-30
  • 2017-11-30
  • 1970-01-01
  • 2020-07-17
  • 2020-02-17
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多