Postgres 数据库,错误:尝试获取资源时出现网络错误

时间:2020-12-30 09:12:34

标签: docker docker-compose dockerfile

我正在尝试制作 Docker 映像,但遇到了一些问题。这是我的 docker-compose.yml :

version: '3.7'

services:
  web:
    container_name: web
    build:
      context: .
      dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/usr/src/web/
    ports:
      - 8000:8000
      - 3000:3000
      - 35729:35729
    stdin_open: true
    depends_on:
      - db

  db:
    restart: always
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASS=pass
      - POSTGRES_DB=mydb
      - POSTGRES_PORT=5432
      - POSTGRES_HOST=localhost
      - POSTGRES_HOST_AUTH_METHOD=trust
    container_name: db
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/

volumes:
  postgres_data:

还有我的 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

# install nodejs
RUN apk add --update nodejs nodejs-npm
RUN apk add zlib-dev jpeg-dev gcc musl-dev
# copy project
COPY . .

RUN python -m pip install -U --force-reinstall pip
RUN python -m pip install Pillow
# install dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN pip install Pillow

# run entrypoint.sh
ENTRYPOINT ["sh", "./entrypoint.sh"]

Anf 终于是我的 entrypoint.sh :

#!/bin/sh

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

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

    echo "PostgreSQL started"
fi

exec "$@"

当我这样做时:

docker-compose up -d --build

它完美地工作。然后我输入:

docker-compose exec web npm start --prefix ./front/

看起来没问题,但是当我在浏览器中输入 http://localhost:3000/

我收到了这样的消息:Error : NetworkError when attempting to fetch resource.

我认为前面没问题,但我无法与后面以及数据库通信。

你能帮我吗?

非常感谢!

1 个答案:

答案 0 :(得分:-1)

正如我在 docker-compose.yml 文件中看到的,您没有在 Web 容器中为 Postgres 定义环境变量。请为以下内容定义环境变量:

数据库

SQL_HOST

SQL_PORT

然后关闭 docker 并打开 docker 希望它会帮助你。