我用
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'
时出现的错误如下:
我已确认
postgres
服务器正在运行:
该应用程序在我的本地运行也没有任何错误。
我创建了一个网络(inventory_network),我尝试在其上附加我的容器。但我注意到的一件事是,每当我运行“compose up”命令时,它都会自动创建另一个网络 inventory_management_inventory_network,容器会附加到该网络,而不是我指定的网络 inventory_network:
这是我在这两个网络上运行“检查”时得到的结果,因为我不确定这是否与该问题有关:
我已经尝试了我所知道的一切,并且非常感谢任何意见。
了解您的项目布局会很有帮助。有这样的事吗
├── 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",
}
}
正如评论之一所述,端口映射不适用于容器之间的连接。