带有 Postgres 的 Django 应用程序上的 Docker 映像返回 django.db.utils.OperationalError

安佐曼

我想为我的 Django 项目 mysite 创建一个 Docker 映像,它有两个应用程序轨道和用户。我使用 docker build -t mysite 来构建我的 docker 镜像。我写了一个 Dockerfile 就像它在 dockerhub 上所说的那样。然后我创建了 docker-compose.yml 文件和我在 docker-compose 文件中使用的 bash 脚本entypoint.sh。

这些是我的文件:

Dockerfile:

FROM django:onbuild

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

docker-compose.yml:

version: '3'

services:
  db:
    image: postgres
    container_name: postgres_container
    environment:
     - POSTGRES_USER=postgres
     - POSTGRES_PASSWORD=postgres
     - POSTGRES_DB=postgres
    ports:
     - 5432:5432
  web:
    image: mysite:latest
    build:
     context: .
     dockerfile: Dockerfile
    container_name: mysite_container
    ports:
      - "8000:8000"
    depends_on:
      - db
    entrypoint: /entrypoint.sh

入口点.sh

#!/bin/sh

python manage.py makemigrations
python manage.py migrate
python manage.py runserver 0.0.0.0:8000
exec "$@"

所以当我想启动整个容器时,我使用了以下命令

docker build .
docker-compose build
docker-compose up

而我的 postgres_containter 启动成功,但是 mysite_container 抛出以下错误:

mysite_container | Traceback (most recent call last):
mysite_container |   File "manage.py", line 22, in <module>
mysite_container |     execute_from_command_line(sys.argv)
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
mysite_container |     utility.execute()
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/core/management/__init__.py", line 365, in execute
mysite_container |     self.fetch_command(subcommand).run_from_argv(self.argv)
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/core/management/base.py", line 288, in run_from_argv
mysite_container |     self.execute(*args, **cmd_options)
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/core/management/base.py", line 335, in execute
mysite_container |     output = self.handle(*args, **options)
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 79, in handle
mysite_container |     executor = MigrationExecutor(connection, self.migration_progress_callback)
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/migrations/executor.py", line 18, in __init__
mysite_container |     self.loader = MigrationLoader(self.connection)
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/migrations/loader.py", line 49, in __init__
mysite_container |     self.build_graph()
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/migrations/loader.py", line 207, in build_graph
mysite_container |     self.applied_migrations = recorder.applied_migrations()
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/migrations/recorder.py", line 61, in applied_migrations
mysite_container |     if self.has_table():
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/migrations/recorder.py", line 44, in has_table
mysite_container |     return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/backends/base/base.py", line 255, in cursor
mysite_container |     return self._cursor()
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/backends/base/base.py", line 232, in _cursor
mysite_container |     self.ensure_connection()
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
mysite_container |     self.connect()
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/utils.py", line 89, in __exit__
mysite_container |     raise dj_exc_value.with_traceback(traceback) from exc_value
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
mysite_container |     self.connect()
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/backends/base/base.py", line 194, in connect
mysite_container |     self.connection = self.get_new_connection(conn_params)
mysite_container |   File "/usr/local/lib/python3.4/site-packages/django/db/backends/postgresql/base.py", line 168, in get_new_connection
mysite_container |     connection = Database.connect(**conn_params)
mysite_container |   File "/usr/local/lib/python3.4/site-packages/psycopg2/__init__.py", line 130, in connect
mysite_container |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
mysite_container | django.db.utils.OperationalError: could not connect to server: Connection refused
mysite_container |      Is the server running on host "localhost" (127.0.0.1) and accepting
mysite_container |      TCP/IP connections on port 5432?
mysite_container | could not connect to server: Cannot assign requested address
mysite_container |      Is the server running on host "localhost" (::1) and accepting
mysite_container |      TCP/IP connections on port 5432?

我在 settings.py 中的数据库是

DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'postgres',
            'USER': 'postgres',
            'PASSWORD': 'postgres',
            'HOST': 'localhost',
            'PORT': '5432',
        }
}

那么,有谁知道我为什么会收到此错误?当我执行 docker-compose up 时,我的 postgres 在端口 5432 上的本地主机上成功运行,但似乎我的 web 容器没有检测到。我应该在 Docker 文件中更改什么才能正确运行 mysite_container?

编辑:现在我添加了新的 settings_docker.py,我将我的主机设置为 'db' 文件,并将环境变量 DOCKER_SETTINGS_MODULE=mysite.settins_docker 添加到我在 docker-compose.yml 中的 Web 服务,并且容器正常启动,但我没有我的数据库关系。那么,如何将这些关系迁移到 docker?

安德鲁·格雷厄姆-约尔

我将在这里暗中拍摄并说您的DATABASES设置不正确settings.py

它需要类似于:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': '5432',
    }
}

进一步阅读这里

编辑:docker-compose.yml直接从上面的链接改编的文件:

version: '3'

services:
  db:
    image: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
  web:
    image: mysite:latest
    build:
    context: .
    dockerfile: Dockerfile
    container_name: mysite_container
    ports:
      - "8000:8000"
    depends_on:
      - db
    entrypoint: /entrypoint.sh

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Django连接到Docker Postgres实例,引发django.db.utils.OperationalError

来自分类Dev

django.db.utils.OperationalError:致命:数据库不存在(postgres /部署到digitalocean)

来自分类Dev

Django 1.7 django.db.utils.OperationalError:没有这样的表:auth_customuser

来自分类Dev

Django迁移django.db.utils.OperationalError:没有这样的表:

来自分类Dev

Django:django.db.utils.OperationalError: 没有这样的列

来自分类Dev

删除迁移和makemigrations之后django.db.utils.OperationalError

来自分类Dev

django.db.utils.OperationalError不管我尝试什么

来自分类Dev

django.db.utils.OperationalError:没有这样的表:Schedule_swimmingscore

来自分类Dev

Django全部验证测试错误-django.db.utils.OperationalError:没有这样的表:socialaccount_openidstore

来自分类Dev

./manage.py测试结果在django.db.utils.OperationalError中:没有这样的列:MyNewColumn

来自分类Dev

django.db.utils.OperationalError:无法连接到服务器:没有这样的文件或目录

来自分类Dev

运行初始makemigrations时的Django 1.9 django.db.utils.OperationalError

来自分类Dev

django.db.utils.OperationalError无法连接到服务器

来自分类Dev

django.db.utils.OperationalError:(1044,“拒绝用户'someuser'@'localhost'访问数据库'/ path / to / Database”')

来自分类Dev

django.db.utils.OperationalError:严重:数据库“路径”不存在

来自分类Dev

django.db.utils.OperationalError:(1045,用户'<user>'@'localhost'的访问被拒绝

来自分类Dev

django.db.utils.OperationalError:严重:用户“ deadlylaid”的对等身份验证失败

来自分类Dev

geodjango with mysql 获取错误 django.db.utils.OperationalError: (1045, "Access denied for user

来自分类Dev

django.db.utils.OperationalError:表“blog_post”已经存在

来自分类Dev

更改为 PostgreSQL 引发 django.db.utils.OperationalError: no such table Error

来自分类Dev

尝试在Django 1.9中迁移-奇怪的SQL错误“ django.db.utils.OperationalError:在“)”附近:语法错误“

来自分类Dev

Django django.db.utils.OperationalError:严重:剩余的连接插槽保留用于非复制超级用户连接

来自分类Dev

MySQL 社区服务器 8.0.16 - django.db.utils.OperationalError:(1045,“用户访问被拒绝(使用密码:是)”)

来自分类Dev

django.db.utils.DatabaseError:没有这样的表

来自分类Dev

django.db.utils.DatabaseError:没有这样的表

来自分类Dev

带有 docker 的 Django 不运行自定义应用程序的迁移

来自分类Dev

在AWS Django应用程序上提供静态文件

来自分类Dev

在Django应用程序上获取超时

来自分类Dev

Django makemigrations有效,迁移失败并显示“ django.db.utils.IntegrityError:NOT NULL约束失败”

Related 相关文章

  1. 1

    将Django连接到Docker Postgres实例,引发django.db.utils.OperationalError

  2. 2

    django.db.utils.OperationalError:致命:数据库不存在(postgres /部署到digitalocean)

  3. 3

    Django 1.7 django.db.utils.OperationalError:没有这样的表:auth_customuser

  4. 4

    Django迁移django.db.utils.OperationalError:没有这样的表:

  5. 5

    Django:django.db.utils.OperationalError: 没有这样的列

  6. 6

    删除迁移和makemigrations之后django.db.utils.OperationalError

  7. 7

    django.db.utils.OperationalError不管我尝试什么

  8. 8

    django.db.utils.OperationalError:没有这样的表:Schedule_swimmingscore

  9. 9

    Django全部验证测试错误-django.db.utils.OperationalError:没有这样的表:socialaccount_openidstore

  10. 10

    ./manage.py测试结果在django.db.utils.OperationalError中:没有这样的列:MyNewColumn

  11. 11

    django.db.utils.OperationalError:无法连接到服务器:没有这样的文件或目录

  12. 12

    运行初始makemigrations时的Django 1.9 django.db.utils.OperationalError

  13. 13

    django.db.utils.OperationalError无法连接到服务器

  14. 14

    django.db.utils.OperationalError:(1044,“拒绝用户'someuser'@'localhost'访问数据库'/ path / to / Database”')

  15. 15

    django.db.utils.OperationalError:严重:数据库“路径”不存在

  16. 16

    django.db.utils.OperationalError:(1045,用户'<user>'@'localhost'的访问被拒绝

  17. 17

    django.db.utils.OperationalError:严重:用户“ deadlylaid”的对等身份验证失败

  18. 18

    geodjango with mysql 获取错误 django.db.utils.OperationalError: (1045, "Access denied for user

  19. 19

    django.db.utils.OperationalError:表“blog_post”已经存在

  20. 20

    更改为 PostgreSQL 引发 django.db.utils.OperationalError: no such table Error

  21. 21

    尝试在Django 1.9中迁移-奇怪的SQL错误“ django.db.utils.OperationalError:在“)”附近:语法错误“

  22. 22

    Django django.db.utils.OperationalError:严重:剩余的连接插槽保留用于非复制超级用户连接

  23. 23

    MySQL 社区服务器 8.0.16 - django.db.utils.OperationalError:(1045,“用户访问被拒绝(使用密码:是)”)

  24. 24

    django.db.utils.DatabaseError:没有这样的表

  25. 25

    django.db.utils.DatabaseError:没有这样的表

  26. 26

    带有 docker 的 Django 不运行自定义应用程序的迁移

  27. 27

    在AWS Django应用程序上提供静态文件

  28. 28

    在Django应用程序上获取超时

  29. 29

    Django makemigrations有效,迁移失败并显示“ django.db.utils.IntegrityError:NOT NULL约束失败”

热门标签

归档