0

这里我有2个案例:

案例 1:我创建了一个名为 Django 的项目Counterproj,它使用了一个名为Sqlite3. 我已经使用 dockerized 这个项目Dockerfile并推送到 Azure ACI,它在这两种情况下localcloud.

案例 2:问题从这里开始,当我迁移Sqlite3PostgreSQL我使用Dockerfiledocker-compose.yml使用服务对 Django 项目进行 dockerized 时webdb这些在我的本地运行良好,但是当我推送到 Azure ACI 时,容器无法相互通信,Counterproj_web:test并且postgres:test实例被终止。

在这里,我的查询是,我们能否在不使用任何 docker-compose.yml 的情况下使用 PostgreSQL 作为数据库来创建单个 Dockerfile 进行 Django 项目容器化。如果我们可以创建单个 dockerfile,请建议我应该在本地和云中运行的最佳方式。

下面是我的,Dockerfile供大家参考。docker-compose.ymldatabase 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,
    }
}
4

2 回答 2

0

您应该始终使用 Docker-Compose 文件。维护运行 Docker 容器所需的所有参数会更容易。

否则,您必须在运行容器时直接传递参数。

于 2021-06-10T18:29:50.213 回答
0

一个容器 - 一个目的。放置您的数据库和应用程序会破坏这种最佳实践。始终有两个容器 - 一个用于数据库,一个用于您的应用程序。使用 docker-compose 文件足以让您的容器进行通信。

我看到的一个可能的问题是您正在安装一些本地目录 - 您确定远程计算机上的文件确实存在吗?

于 2021-06-11T14:15:04.893 回答