我有一个简单的MEAN应用程序,我想多次运行,唯一的问题是我不希望应用程序的每个实例指向同一个数据库。 为了在Docker中解决这个问题,我将Node代码和MongoDB放在同一个容器中。代码引用了特定的数据库,但无关紧要,因为每个容器都有自己的内部数据库服务器。 显然这是浪费而不是最佳实践,所以我正在寻找替代解决方案。
理想情况下,我希望将一个Docker镜像与Node代码的一个实例保持一致,我知道我可以使用两个不同的环境变量重建Docker镜像两次,但这不能很好地扩展。
我原以为我可以使用Docker网络来引用单个数据库服务器容器,然后对于包含我的Node代码的每个容器,将入口点作为自定义脚本,在开始之前设置作为环境变量传递给它的参数节点服务器。 这样,每当我从该图像运行容器时,我都会将新的DB名称作为Node代码将读取的参数传递给它。这样我就可以从一个映像创建无限容器,所有容器都使用唯一的数据库但指向同一个数据库服务器。
我不确定这是否是最佳方式,如果有任何最佳实践可以解决这个问题。
干杯
答案 0 :(得分:1)
您可以做的是在运行应用容器时传递指向数据库的环境变量。
docker run -e "DB_HOST=mongo" -e "DB_USER=user" ...
然后,您可以修改节点代码以从环境变量中读取这些值。然后,您需要创建一个网络并向其添加数据库容器和应用程序容器。现在,您可以在名为mongo的单独容器中运行mongo数据库,并将mongo作为db的主机名传递。