出于学习目的,我正在从事django项目。我使用db
容器(只是带有几个设置的postgresql)和带有python-django堆栈的web
容器创建了一个docker-compose安装程序。这是我的docker-compose.yml
文件的简化版本:
version: '3'
services:
db:
image: postgres
expose:
- "5432"
web:
build: .
command: python /app/manage.py runserver 0.0.0.0:8000
depends_on:
- db
这将打开数据库。我可以从主机访问数据库,这非常方便,因为我可以轻松查看数据库并进行一些编辑。
我也可以使用web
容器中django实例中的数据库,只需在django配置中使用db
作为数据库主机名即可。
这意味着,如果我想从主机运行测试,或者运行服务器并对其进行调试,则可以使用localhost
作为数据库主机,它将连接,并且如果我要运行应用程序在web
容器中以“生产”模式进行操作时,我必须编辑django的设置以更改数据库主机。
我应该如何处理“调试模式”和“生产模式”之间的这种差异?很明显,我可以在设置文件中有一个标志,可以根据环境变量设置或不设置标志,也可以将数据库主机名本身放在一个env var中,但是这种解决方案并不令我满意。
经过一番研究,我发现this oldish question的答案是
Docker将很快允许启动一个共享网络的容器 另一个容器的命名空间
以及此非常有趣的文章的链接:Jumpers and the Software Defined Localhost
根据这些内容,可以引用localhost
容器中web
的端口,并将查询转发到db
容器的该端口。好吧,我想这就是我想要的。但是我找不到其他参考资料。
最后,我想问一下我是在过度设计还是在做一些根本上错误的事情。