简体   繁体   English

无法使用 docker 和 django 与 postgres 通信

[英]Unable to communicate with postgres using docker and django

I don't achieve to communicate with my database postgres using Docker and Django.我无法使用 Docker 和 Django 与我的数据库 postgres 进行通信。 Here is my docker-compose.yml:这是我的 docker-compose.yml:

version: '3'

services:
  web:
    container_name: web
    build:
      context: ./web
      dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./web/:/usr/src/web/
    ports:
      - 8000:8000
      - 3000:3000
      - 35729:35729
    env_file:
      - database.env
    stdin_open: true
    depends_on:
      - database
  
  database:
    container_name: database
    image: postgres
    volumes:
      - database-data:/var/lib/postgresql/data/
    ports:
      - 5432:5432
    
volumes:
  database-data:

Here is my database.env:这是我的database.env:

# database.env
POSTGRES_USERNAME=admin
POSTGRES_PASSWORD=pass
POSTGRES_DBNAME=db
POSTGRES_HOST=database
POSTGRES_PORT=5432
PGUSER=admin
PGPASSWORD=pass
PGDATABASE=db
PGHOST=database
PGPORT=5432
DATABASE=db
SQL_HOST=database
SQL_PORT=5432

And here is my Dockerfile:这是我的 Dockerfile:

# pull official base image
FROM python:3.8.3-alpine

# set work directory
WORKDIR /usr/src/web

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev
RUN apk add zlib-dev jpeg-dev gcc musl-dev
# install nodejs
RUN apk add --update nodejs nodejs-npm

# copy project
ADD . .

# install dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

# run entrypoint.sh
ENTRYPOINT ["sh", "/usr/src/web/entrypoint.sh"]

And there my entrypoint.sh:还有我的entrypoint.sh:

#!/bin/sh

if [ "$DATABASE" = "db" ]
then
    echo "Waiting for postgres..."

    while ! nc -z $SQL_HOST $SQL_PORT; do
      sleep 10
    done

    echo "PostgreSQL started"
fi

exec "$@"

I build the docker using that: docker-compose up -d --build我使用以下方法构建 docker: docker-compose up -d --build

Then I type that: docker-composexec web npm start --prefix./front/ .然后我输入: docker-composexec web npm start --prefix./front/

I can access to the frontent: http://localhost:3000我可以访问http://localhost:3000

But when I do docker logs database I got that:但是当我做docker logs database时,我得到了:

2021-01-18 06:31:49.207 UTC [1] LOG:  database system is ready to accept connections
2021-01-18 06:31:51.640 UTC [32] FATAL:  password authentication failed for user "admin"
2021-01-18 06:31:51.640 UTC [32] DETAIL:  Role "admin" does not exist.
Connection matched pg_hba.conf line 99: "host all all all md5"

Here is the status:这是状态:

37ee3e314d52        web   "sh /usr/src/web/ent…"   About a minute ago   Up About a minute   0.0.0.0:3000->3000/tcp, 0.0.0.0:8000->8000/tcp, 5432/tcp   web
65dfeae57a94        postgres              "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp                                     database

Coud you help me?你能帮帮我吗?

Thank you very much !非常感谢 !

It seems like the postgres user you are using doesn't exist.您使用的 postgres 用户似乎不存在。 You can add some environment variables to database docker-compose to create those (you probably need to create the database, too), Or you can write some script to create those for the first time.您可以在数据库 docker-compose 中添加一些环境变量来创建它们(您可能也需要创建数据库),或者您可以编写一些脚本来首次创建它们。

version: '3'

services:
  web:
    container_name: web
    build:
      context: ./web
      dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./web/:/usr/src/web/
    ports:
      - 8000:8000
      - 3000:3000
      - 35729:35729
    env_file:
      - database.env
    stdin_open: true
    depends_on:
      - database
  
  database:
    container_name: database
    image: postgres
    volumes:
      - database-data:/var/lib/postgresql/data/
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=admin 
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=db
    
volumes:
  database-data:

About postgres image envs you can check this link .关于 postgres 图像环境,您可以查看此链接

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM