【问题标题】:Docker config to edit Node code when run运行时编辑节点代码的 Docker 配置
【发布时间】:2018-01-23 08:03:17
【问题描述】:

我有一个简单的 MEAN 应用程序,我想多次运行它,唯一的问题是我不希望应用程序的每个实例都指向同一个数据库。 为了在 Docker 中解决这个问题,我将 Node 代码和 MongoDB 放在同一个容器中。该代码引用了一个特定的数据库,但这并不重要,因为每个容器都有自己的内部数据库服务器。 显然这很浪费,而且不是最佳实践,所以我正在寻找替代解决方案。

理想情况下,我想用一个 Node 代码实例保留一个 Docker 映像,我知道我可以使用两个不同的环境变量重建 Docker 映像两次,但这不能很好地扩展。

我在想我可以使用 Docker 网络来引用单个数据库服务器容器,然后对于包含我的节点代码的每个容器,将入口点作为自定义脚本,在开始之前将参数设置为环境变量传递给它节点服务器。 这样,每当我从该映像运行容器时,我都会将一个新的数据库名称作为节点代码将读取的参数传递给它。这样我就可以从一个图像创建无限的容器,所有容器都具有唯一的数据库,但指向同一个数据库服务器。

我不确定这是否是最好的方法,以及是否有围绕此的任何最佳实践。

干杯

【问题讨论】:

    标签: mongodb docker mean devops


    【解决方案1】:

    您可以做的是在运行应用容器时传递指向数据库的环境变量。

    docker run -e "DB_HOST=mongo" -e "DB_USER=user" ...
    

    然后您可以修改您的节点代码以从环境变量中读取这些值。然后您需要创建一个网络并将您的数据库容器和应用程序容器添加到它。现在您可以在名为 mongo 的单独容器中运行 mongo 数据库,并将 mongo 作为 db 的主机名。

    【讨论】:

    • 谢谢 - 这正是我想要的。我在运行时使用了 Docker-Compose 来简化此操作:# docker-compose.yml --- 版本:3 服务:RED_SITE:构建:节点端口:-“3001:3000”环境:-DBNAME="RED_DB" BLUE_SITE : build: node ports: - "3002:3000" environment: - DBNAME="BLUE_DB" MONGO: build: mongo volume: - /opt/data_db:/data/db
    猜你喜欢
    • 2021-04-12
    • 2013-04-30
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    相关资源
    最近更新 更多