Mat*_*llo 12 django postgresql amazon-web-services docker-compose
我目前使用docker-compose构建了一个系统,它创建了一个Django应用程序.
到目前为止,我在我的测试版本中使用了容器内的数据库(postgresql).现在我已将数据库从此容器更改为AWS中的RDS实例.
使用Pg_dump我在RDS中重新创建了数据库并更改了settings.py,一切都被认为是正常的.我已经从webapp中的数据库中访问了数据而没有任何问题.
一切都很好,直到我不得不进行迁移.没有数据库容器Django容器给我这样的消息:
django.db.utils.OperationalError:无法将主机名"db"转换为地址:名称或服务未知
我的Docker-compose.yml文件在更改之前:
version: '2'
services:
db:
image: postgres:9.5
restart: always
environment:
POSTGRES_USER: testing
POSTGRES_PASSWORD: tests
POSTGRES_DB: test
volumes:
- /dbdata:/var/lib/postgresql/data
django:
build: ./django
command: gunicorn contactto.wsgi:application -b 0.0.0.0:8000
restart: always
volumes:
- ./django:/usr/src/app
- ./django/static:/usr/src/app/contactto/static
ports:
- "8000:8000"
depends_on:
- db
Run Code Online (Sandbox Code Playgroud)
现在改变之后:
version: '2'
services:
django:
build: ./django
command: gunicorn contactto.wsgi:application -b 0.0.0.0:8000
restart: always
volumes:
- ./django:/usr/src/app
- ./django/static:/usr/src/app/contactto/static
ports:
- "8000:8000"
Run Code Online (Sandbox Code Playgroud)
来自settings.py的DATABASES.之前:
DATABASES = {
'default': {
'ENGINE': 'tenant_schemas.postgresql_backend',
'NAME': 'testing',
'USER': 'test',
'PASSWORD': 'test',
'HOST': 'db',
'PORT': '5432',
}
}
Run Code Online (Sandbox Code Playgroud)
后:
DATABASES = {
'default': {
'ENGINE': 'tenant_schemas.postgresql_backend',
'NAME': 'testing',
'USER': 'test',
'PASSWORD': 'test',
'HOST': 'xxx.rds.amazonaws.com',
'PORT': '5432',
}
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我可以在我的应用程序中使用aws数据库......我可以创建用户并在数据库中执行操作并显示更改.现在在CLI中,我甚至无法在没有消息的情况下使用manage.py shell.
我完全迷失了.
小智 12
对于其他经历过这种情况的人。
以下命令(删除所有未使用的容器、网络、图像和可选的卷)解决了我的问题:
docker system prune
Run Code Online (Sandbox Code Playgroud)
请参阅docker 文档以获取更多信息
小智 7
添加网络、链接和depends_on在 compose 文件中配置。
例子:
services:
db:
build: .
container_name: db
networks:
- djangonetwork
web:
build: .
depends_on:
- db
links:
- db:db
networks:
- djangonetwork
networks:
djangonetwork:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
回答我的问题,这是一个愚蠢的问题......
我的manage.py 仅选择base.py 设置文件,并且没有考虑staging.py 设置文件。所以它是在 CLI 中进行破坏,而不是在应用程序内部进行破坏。
归档时间: |
|
查看次数: |
10891 次 |
最近记录: |