我有一个python flask REST应用程序,它在部署时会创建一个.db sqlite数据库文件。此应用程序现在部署在三个节点的docker swarm集群上。我使用swarm-stack文件在这些节点上部署容器。我的问题是现在每个容器都有自己的.db文件,即应用程序的每个实例都有一个单独的数据库。我希望这个db文件有一个公共的挂载点,这样每个服务都可以访问一个公共的数据库。我如何实现这一点?我是新来码头的。
发布于 2019-03-31 12:03:27
跨整个节点/机器共享文件不是Docker直接为您解决的问题,但您可以在shared storage systems环境中查看Docker存储驱动程序。这有助于它与NFS、ZFS等解决方案集成。
但是,您提到您正在使用SQLite和Flask,使用的是SQLAlchemy驱动程序。为了节省您的麻烦,而不是尝试跨三个节点共享一个文件系统,您应该使用数据库服务器,如MySQL、MariaDB或PostgreSQL (仅举几例),所有这些服务器都可以很好地与SQLAlchemy配合使用。这样,而不是试图与您的Flask应用程序的所有运行实例共享相同的SQLite文件(这将非常频繁/快速地锁定/降级),您可以让所有的Flask容器连接到相同的数据库容器。
这个额外的数据库可以很容易地在容器中运行,也可以由docker-compose管理。这样,只有一个节点需要访问文件系统来存储数据库的数据。
https://stackoverflow.com/questions/55436760
复制相似问题