我目前使用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
现在改变之后:
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"
来自settings.py的DATABASES。 之前:
DATABASES = {
'default': {
'ENGINE': 'tenant_schemas.postgresql_backend',
'NAME': 'testing',
'USER': 'test',
'PASSWORD': 'test',
'HOST': 'db',
'PORT': '5432',
}
}
后:
DATABASES = {
'default': {
'ENGINE': 'tenant_schemas.postgresql_backend',
'NAME': 'testing',
'USER': 'test',
'PASSWORD': 'test',
'HOST': 'xxx.rds.amazonaws.com',
'PORT': '5432',
}
}
奇怪的是,我可以在我的应用程序中使用aws数据库...我可以创建用户并在数据库中执行操作并显示更改。现在在CLI中,我甚至无法在没有消息的情况下使用manage.py shell。
我完全迷失了。
答案 0 :(得分:2)
在docker compose文件中添加网络,链接和Depends_on 配置。
示例:
services:
db:
build: .
container_name: db
networks:
- djangonetwork
web:
build: .
depends_on:
- db
links:
- db:db
networks:
- djangonetwork
networks:
djangonetwork:
driver: bridge
答案 1 :(得分:1)
回答我的问题,这是一个愚蠢的问题......
我的manage.py只选择了base.py设置文件,并没有考虑staging.py设置文件。所以它在CLI中破解并且没有破坏应用程序内部。
答案 2 :(得分:1)
在您的docker-compose.yml的“ django”部分的“ depends_on”部分下,尝试在其后添加links: - db:db
,甚至将其替换为depends_on:db。
如果您输入docker logs (container name)
,我敢打赌,您会发现确定“ db”指向的位置显然很麻烦。
我认为他们至少在新的版本中希望终止对docker-compose中的链接的支持。
答案 3 :(得分:1)
click on 此链接可获取您的答案或添加命令:bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
中的 docker-compose.yaml
。我希望这对您有用。它对我有用
答案 4 :(得分:0)