当前位置: 首页 > 面试题库 >

Django通过docker-compose连接到Postgres

轩辕翰
2023-03-14
问题内容

我的django项目无法连接到postgres数据库容器。我该怎么办?

它在命令时崩溃python manage.py collectstatic --noinput && python manage.py makemigrations blog && python manage.py migrate。我知道docker
run命令会创建一个新的容器,但是在docker-compose.yml中,bash包含了更多命令。它应该工作,不是吗?

我的Dockerfile

FROM python:3.6-alpine
MAINTAINER Name <name@domain>

ENV PYTHONUNBUFFERED 1
ENV INSTALL_PATH /heckblog
RUN mkdir -p $INSTALL_PATH

WORKDIR $INSTALL_PATH


COPY requirements.txt requirements.txt

# make available run pip install psycopg2
RUN apk update && \
    apk add --virtual build-deps gcc python3-dev musl-dev && \
    apk add postgresql-dev
RUN pip3 install -r requirements.txt

# add bash into alpine linux
RUN apk add --update bash && rm -rf /var/cache/apk/*

COPY ./heckblog .
#RUN pip install .

CMD gunicorn -b 0.0.0.0:8000 --access-logfile - "config.wsgi:application"

我的docker-compose.yml

version: '2'


services:
    db:
        image: postgres:alpine
        environment:
            POSTGRES_USER: blogdmin
            POSTGRES_PASSWORD: password
            POSTGRES_DB: heckblog
            PGDATA: /tmp/pgdata
        volumes:
            - postgres_data:/tmp/pgdata

    web:
        build: .
        command: >
            bash -c "sleep 10 &&
            python manage.py collectstatic --noinput && 
            python manage.py makemigrations blog && 
            python manage.py migrate &&
            echo \"from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')\" | python manage.py shell &&
            gunicorn -b 0.0.0.0:8000 --access-logfile - --reload \"config.wsgi:application\""                
        volumes:
            - ./heckblog:/heckblog
        depends_on:
            - db
        environment: 
            IN_DOCKER: 1
        ports:
            - "80:8000"


volumes:
    postgres_data:

settings.py

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'heckblog',
        'USER': 'blogdmin',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '', # default port
    }
}

...

输出docker-compose up --build

web_1  |        TCP/IP connections on port 5432?
web_1  | 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?
web_1  |
heckblog_web_1 exited with code 1

我使用:Windows 10 Docker 17.03.0-ce-win1-(10296)docker-compose版本1.11.2 Django ==
1.10.6 psycopg2 == 2.7.1

谢谢答案


问题答案:

默认情况下,Docker中的每个容器都有其自己的主机名和IP。当compose为您增加容器时,默认情况下还将所有容器放置在网络上以允许基于DNS的发现。

这意味着您的数据库无法在localhost上访问,但可以通过服务名称“ db”访问它。在您的settings.py中更改此行:

    'HOST': 'localhost',

至:

    'HOST': 'db',


 类似资料:
  • 问题内容: 我在Mac OS 10.8.5上安装了docker-machine 0.1.0和docker-compose 1.1.0。 Docker-machine正常运行,并且能够通过docker-machine ssh连接。 但是无法从docker-compose连接。 无法通过http + unix://var/run/docker.sock连接到Docker守护程序-它正在运行吗? 如果它

  • 问题内容: 我收到一条错误消息,提示我无法连接到Docker守护程序。我调查了其他人遇到类似问题的答案,但没有帮助。我正在运行Ubuntu 15.10版本。我将尝试提供我所有的信息。 Docker版本 Docker-Compose版本 如果我尝试停止或启动服务,就会发生这种情况。 如果我跑步 任何帮助将不胜感激。让我知道您是否需要更多信息。 问题答案: 我发现了这个问题,似乎可以解决我的问题。 G

  • 我在Mac OS 10.8.5上安装了docker-machine 0.1.0和docker-compose 1.1.0。 docker-machine运行正常,并且能够通过docker-machine SSH进行连接。 但无法从Docker-Compose连接。 无法连接到HTTP+UNIX上的Docker后台进程://var/run/Docker.sock-它正在运行吗? 如果它位于非标准位置

  • 问题内容: 我想创建以下基础结构流: 使用Docker如何实现? 问题答案: 首先,您需要在要ssh- in的映像中安装SSH服务器。您可以对安装了ssh服务器的所有容器使用基础映像。然后,您只需要运行每个容器,即可将ssh端口(默认为22)映射到主机端口(镜像中的远程服务器)到一个端口。即: 然后,如果可以从外部访问主机的端口52022和53022,则可以使用主机的ip(远程服务器)通过ssh在

  • 我有一台安装了PostgreSQL的服务器。我的所有服务都在容器中工作(docker-compose)。我想从容器中使用我的主机PostgreSQL。但是我有错误: 我的docker compose使用主机网络模式,如下所示: 我的数据库连接URL是:jdbc:postgresql://localhost:5432/shop-bd

  • 我正在使用PhpStorm 2018.3.4,Docker,MySQL和Ubuntu。我试图配置MySQL与Docker容器不成功。 首先,我尝试了以下配置: 它给了我这个错误: 然后,我试了一下: 这个给了我另一个错误。 我错过什么了吗?有没有其他地方我必须配置一些东西? 输出: 这里: 对于命令,这里是描述的链接:https://pastebin.com/9LmeAkc8 下面是docker-