为了在Docker内部使用Postgres,需要配置数据库用户、密码和数据库名称等信息。这是通过设置容器的环境变量来完成的。可以找到支持变量的完整列表
here
.
此外,您还需要公开端口
5432
从波斯特格雷斯到你的
web
您的内部服务
docker-compose
文件。
这样的方法应该有效:
docker-compose.yml公司
version: '3'
services:
db:
image: postgres
ports:
- "5432"
environment:
- POSTGRES_DB=stemletics
- POSTGRES_USER=stemleticsadmin
- POSTGRES_PASSWORD=changeme
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
您还必须更改内部使用的主机名
settings.py
.
Docker撰写
为您的服务创建默认网络,并将正在运行的容器附加到此网络。在Web容器中,数据库将在主机名处可用。
db
.
设置.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'stemletics',
'USER': 'stemleticsadmin',
'PASSWORD': 'changeme',
'HOST': 'db', # set in docker-compose.yml
'PORT': 5432 # default postgres port
}
}
最后,如果在Python代码中没有任何类型的数据库重新连接逻辑,那么迁移可能仍然失败。这是因为
depends_on
只等待容器启动,但Postgres在容器运行后需要几秒钟进行初始化。
为了快速解决这个问题,一次运行一个容器是最简单的。
即。:
$ docker-compose up -d db
等待Postgres初始化
$ docker-compose up -d web
希望这能让你振作起来。