gpt4 book ai didi

postgresql - Docker容器+postgresql接口(interface)依赖

转载 作者:行者123 更新时间:2023-12-02 19:49:08 25 4
gpt4 key购买 nike

我是 docker 世界的新手,我遇到了一个我不知道如何解决的情况。

基本上,我有一个容器正在运行 wiki.js在 Ubuntu 20.04 服务器中,关联到仅为此类容器创建的 docker 网络:

sudo docker network create --subnet=172.18.0.0/16 my.wiki.net

sudo docker run -d --net my.wiki.net --name my.wiki \
-restart=unless-stopped \
/* other args */ \
requarks/wiki:2

另一方面,在容器内,wiki 设置为连接到 172.18.0.1与postgresql交谈。

最后,postgresql 设置为监听 localhost172.18.0.1 :
listen_address = 'localhost,172.18.0.1`

但是,在机器重新启动时, postgresqldocker 之前启动并且,因为 my.wiki容器还没有运行,接口(interface) 172.18.0.1主机中不存在,postgresql 无法绑定(bind)到它。

我想到了一些潜在的解决方案,但它们都不起作用或不符合我的口味:
  • 编辑postgresql.service systemctl 的配置文件添加 after确保docker的关系之前启动过,所以接口(interface)存在:我不喜欢这个解决方案,因为我不想在服务之间创建这样的直接依赖关系。我想让一切都以最懒惰的方式工作。
  • 配置postgresql使用重试策略,因此它会尝试在某个时间间隔内绑定(bind)到它,足以创建接口(interface):我认为 postgresql不提供这种定制(我搜索它没有成功)。
  • 制作 postgresql绑定(bind)到任何( * )接口(interface):是的,它肯定会工作(我仍然有 pg_hba.conf 作为第二层保护),但我不确定它从安全甚至性能角度的影响。你会向我推荐这种方法吗?
  • 通过重新启动手动创建系统范围的接口(interface),并使 wiki.js容器对它有可见性:首先我不知道该怎么做,其次,从设计的角度来看它有一些影响:如果我运行需要 postgresql 的第二个容器,之前创建的接口(interface)的语义是什么?
  • 这是 wiki.js 的接口(interface)只能访问数据库,因此我必须手动为第二个容器创建第二个接口(interface)以遵循设计。缺点是:如果你有 n容器,你最终会得到 2 * n接口(interface),n对于容器的外部可见性(因为,除非它们需要相互通信,否则我更愿意为每个容器创建一个单独的 docker 用户自定义子网)和 n用于他们的数据库通信。
  • 它是所有需要 postgresql 的容器的独特界面访问,所以它是一种“postgresql-docker` localhost:是的,我可以接受它,虽然我不知道该怎么做(我不知道如何正确创建接口(interface)),而且,似乎我正在更改我的设计以适应缺陷,而不是解决缺陷(postgresql运行时接口(interface)不存在,以后不会重试)。

  • 因此,任何建议、替代设计或实现我上述任何建议的步骤都将受到欢迎。

    最佳答案

    SystemD 服务描述符也允许使用“Before”子句。这会转换为提到的其他服务的 After 子句。

    https://www.freedesktop.org/software/systemd/man/systemd.unit.html

    此外,您可能希望将网络创建拆分为 Type=oneshot 服务,并让您的 wiki.js 服务双重依赖于 postgres 和该 network-oneshot 单元。

    关于postgresql - Docker容器+postgresql接口(interface)依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61976449/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com