服务器是否在主机“localhost”(127.0.0.1) 上运行并接受端口 5432 上的 web-1 TCP/IP 连接?

问题描述 投票:0回答:1

我用

postgresql backend
创建了一个 Django 项目,并尝试将其容器化。 这是我的
Dockerfile
:

FROM python:3.9

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /app

COPY requirements.txt /app/

RUN pip install --no-cache-dir -r requirements.txt

COPY . /app/

EXPOSE 8000

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

这是我的

docker-compose.yml
文件:

version: '3'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
    networks:
      - inventory_network

  db:
    ports: 
      - "5433:5432"
    image: postgres:16
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=root
      - POSTGRES_DB=InventoryManagement
    networks:
      - inventory_network

networks:
  inventory_network:
    driver: bridge

这是我在

django
项目中的settings.py,用于连接到数据库:

WSGI_APPLICATION = 'Inventory_management.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'InventoryManagement',
        'USER': 'postgres',
        'PASSWORD': 'root',
        'HOST': 'db', 
        'PORT': '5433'
    }
}

sudo docker build .
命令运行没有任何错误。 当我尝试运行
'sudo docker compose up'
时出现的错误如下: Is the server running on host

我已确认

postgres
服务器正在运行: Server active(running) 该应用程序在我的本地运行也没有任何错误。

我创建了一个网络(inventory_network),我尝试在其上附加我的容器。但我注意到的一件事是,每当我运行“compose up”命令时,它都会自动创建另一个网络 inventory_management_inventory_network,容器会附加到该网络,而不是我指定的网络 inventory_network:

这是我在这两个网络上运行“检查”时得到的结果,因为我不确定这是否与该问题有关: inventory_network inspect inventory_management_inventory_network inspect

我已经尝试了我所知道的一切,并且非常感谢任何意见。

django postgresql docker server port
1个回答
0
投票

了解您的项目布局会很有帮助。有这样的事吗

├── docker-compose.yml
├── Dockerfile
├── Inventory_management
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── requirements.txt

您可以将此信息添加到您的问题中吗?

此外,对于您描述的设置,您应该在

settings.py
中使用端口 5432 (而不是 5433):

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "InventoryManagement",
        "USER": "postgres",
        "PASSWORD": "root",
        "HOST": "db",
        "PORT": "5432",
    }
}

正如评论之一所述,端口映射不适用于容器之间的连接。

© www.soinside.com 2019 - 2024. All rights reserved.