这里我有2个案例:
案例 1:我创建了一个名为 Django 的项目Counterproj
,它使用了一个名为Sqlite3
. 我已经使用 dockerized 这个项目Dockerfile
并推送到 Azure ACI,它在这两种情况下local
和cloud
.
案例 2:问题从这里开始,当我迁移Sqlite3
到PostgreSQL
我使用Dockerfile
和docker-compose.yml
使用服务对 Django 项目进行 dockerized 时web
,db
这些在我的本地运行良好,但是当我推送到 Azure ACI 时,容器无法相互通信,Counterproj_web:test
并且postgres:test
实例被终止。
在这里,我的查询是,我们能否在不使用任何 docker-compose.yml 的情况下使用 PostgreSQL 作为数据库来创建单个 Dockerfile 进行 Django 项目容器化。如果我们可以创建单个 dockerfile,请建议我应该在本地和云中运行的最佳方式。
下面是我的,Dockerfile
供大家参考。docker-compose.yml
database settings
Dockerfile:
#syntax=docker/dockerfile:experimental
# Python Version(Base Image)
FROM python:3
# Set Envirment variable
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set Working directory
WORKDIR /app
# Add all the things into app
ADD . /app
# Instruct docker to install all the requirements to run the project
# Copy current requirements to your docker image
COPY ./requirments.txt /app/requirments.txt
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirments.txt
COPY . /app
# install dependencies
RUN pip install --upgrade pip
码头工人-compose.yml:
version: '3.3'
services:
db:
image: postgres:test
volumes:
- ./db/:/var/lib/posgresql/data
environment:
- POSTGRES_DB=Counterproj
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=12345
web:
image: Counterproj_web:test
build: .
command: python manage.py runserver 0.0.0.0:80
ports:
- "80:80"
volumes:
- .:/app
depends_on:
- db
设置.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'Counterproj',
'USER': 'postgres',
'PASSWORD': '12345',
'HOST': 'db',
'PORT': 5432,
}
}