我是新的对接和网络开发一般.当我试图包装我的Django项目时,我遇到了一个错误,几天都无法解决它.这个错误可能很愚蠢,但我找不到解决方案.如果有人帮我解决这个问题,我会很高兴的.提前谢谢您. 作为操作系统,我使用Ubuntu 22.04

以下是命令docker compose builddocker compose up之后的输出:

[+] Running 2/0
 ⠿ Container test_task-db_task-1  Created                                                                                                               0.0s
 ⠿ Container test_task_container  Created                                                                                                               0.0s
Attaching to test_task-db_task-1, test_task_container
test_task-db_task-1  | 
test_task-db_task-1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
test_task-db_task-1  | 
test_task-db_task-1  | 2023-06-07 10:46:07.124 UTC [1] LOG:  starting PostgreSQL 14.1 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20211027) 10.3.1 20211027, 64-bit
test_task-db_task-1  | 2023-06-07 10:46:07.125 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
test_task-db_task-1  | 2023-06-07 10:46:07.125 UTC [1] LOG:  listening on IPv6 address "::", port 5432
test_task-db_task-1  | 2023-06-07 10:46:07.147 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
test_task-db_task-1  | 2023-06-07 10:46:07.163 UTC [21] LOG:  database system was shut down at 2023-06-07 10:45:29 UTC
test_task-db_task-1  | 2023-06-07 10:46:07.218 UTC [1] LOG:  database system is ready to accept connections
test_task_container  | Watching for file changes with StatReloader
test_task_container  | Exception in thread django-main-thread:
test_task_container  | Traceback (most recent call last):
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection
test_task_container  |     self.connect()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 270, in connect
test_task_container  |     self.connection = self.get_new_connection(conn_params)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection
test_task_container  |     connection = self.Database.connect(**conn_params)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
test_task_container  |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
test_task_container  | psycopg2.OperationalError: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
test_task_container  |  Is the server running locally and accepting connections on that socket?
test_task_container  | 
test_task_container  | 
test_task_container  | The above exception was the direct cause of the following exception:
test_task_container  | 
test_task_container  | Traceback (most recent call last):
test_task_container  |   File "/usr/local/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
test_task_container  |     self.run()
test_task_container  |   File "/usr/local/lib/python3.10/threading.py", line 953, in run
test_task_container  |     self._target(*self._args, **self._kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
test_task_container  |     fn(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 136, in inner_run
test_task_container  |     self.check_migrations()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 574, in check_migrations
test_task_container  |     executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/executor.py", line 18, in __init__
test_task_container  |     self.loader = MigrationLoader(self.connection)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/loader.py", line 58, in __init__
test_task_container  |     self.build_graph()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/loader.py", line 235, in build_graph
test_task_container  |     self.applied_migrations = recorder.applied_migrations()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/recorder.py", line 81, in applied_migrations
test_task_container  |     if self.has_table():
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/recorder.py", line 57, in has_table
test_task_container  |     with self.connection.cursor() as cursor:
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 330, in cursor
test_task_container  |     return self._cursor()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 306, in _cursor
test_task_container  |     self.ensure_connection()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 288, in ensure_connection
test_task_container  |     with self.wrap_database_errors:
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 91, in __exit__
test_task_container  |     raise dj_exc_value.with_traceback(traceback) from exc_value
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection
test_task_container  |     self.connect()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 270, in connect
test_task_container  |     self.connection = self.get_new_connection(conn_params)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection
test_task_container  |     connection = self.Database.connect(**conn_params)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
test_task_container  |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
test_task_container  | django.db.utils.OperationalError: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
test_task_container  |  Is the server running locally and accepting connections on that socket?
test_task_container  | 
                      

以下是我的Docker-Compose文件:

services:
  task:
    build: .
    volumes:
      - .:/test_task
    ports:
      - 8000:8000
    image: app:django
    container_name: test_task_container
    command: python manage.py runserver 0.0.0.0:8000


  db_task:
    image: postgres:14.1-alpine
    restart: always
    env_file:
      - .env
    ports:
      - '5432:5432'
    volumes:
      - db:/var/lib/postgresql/data
volumes:
  db:
    driver: local

以下是dockerfile本身:

FROM python:3.10-slim-buster

ENV PYTHONBUFFERED=1

WORKDIR /test_task

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

.env文件:

POSTGRES_HOST=db
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=postgres
DJANGO_SETTINGS_MODULE=core.settings

和settings.py中的数据库设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': os.getenv('POSTGRES_HOST'),
        'PORT': os.getenv('POSTGRES_PORT'),
        'USER': os.getenv('POSTGRES_USER'),
        'PASSWORD': os.getenv('POSTGRES_PASSWORD'),
        'NAME': os.getenv('POSTGRES_DB')
    }
}

我试图将我的项目打包并在本地服务器上打开

推荐答案

需要考虑的几个问题:

  • 默认情况下,组合设置中的服务(在创建的坞站网络内)将解析为它们的名称.因此,POSTGRES_HOST应该是"db_task"
  • 如果.env与您的docker-compose.yaml位于同一位置,则应自动取走.因此,为了保持一致性,请为两者都指定env_file或两者都不指定.
  • 数据库上的Django应用程序depends.如果数据库尚未启动并运行,则Django应用程序无法连接到它.因此,您应该在task服务中添加一个depends_on,这样在数据库准备好之前,应用程序就不会被调出:
  task:
    # ...
    depends_on:
      - db_task

Python相关问答推荐

Pandas 有条件轮班操作

_repr_html_实现自定义__getattr_时未显示

发生异常:TclMessage命令名称无效.!listbox"

在Wayland上使用setCellWidget时,try 编辑QTable Widget中的单元格时,PyQt 6崩溃

如何请求使用Python将文件下载到带有登录名的门户网站?

当独立的网络调用不应该互相阻塞时,'

我如何根据前一个连续数字改变一串数字?

给定高度约束的旋转角解析求解

为什么np. exp(1000)给出溢出警告,而np. exp(—100000)没有给出下溢警告?

如何在Pyplot表中舍入值

为什么我的sundaram筛这么低效

将一个双框爆炸到另一个双框的范围内

如何在Gekko中使用分层条件约束

判断Python操作:如何从字面上得到所有decorator ?

Python OPCUA,modbus通信代码运行3小时后出现RuntimeError

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

Pandas:计数器的滚动和,复位

Matplotlib中的曲线箭头样式

无法使用请求模块从网页上抓取一些产品的名称

来自任务调度程序的作为系统的Python文件