linux – 重新启动命名容器分配不同的IP
我试图使用Docker部署我的应用程序,并遇到一个问题,重新启动命名容器为容器分配不同的IP.也许解释我在做什么会更好地解释这个问题: > Postgres在一个名为“postgres”的独立容器内运行 将postgres容器映像链接到webapp容器,在webapp容器中插入一个带有postgres容器IP的hosts文件条目.这允许我使用postgres指向我webapp中的postgres db:5432(我正在使用Django btw).这一切都很好,除非由于某种原因postgres崩溃. 在我手动停止postgres进程以模拟postgres进程崩溃之前,我验证了postgres容器的IP:
现在模拟崩溃我停止postgres容器:
如果现在我通过使用重启postgres
容器的ip更改:
因此,指向webapp容器中的postgres容器的IP不再正确.我通过命名容器docker为它指定一个名称,使用特定的配置,以便您可以可靠地链接容器(网络和卷).如果IP改变,这似乎打败了目的. 如果每次postgres重新启动时我都必须重新启动我的webapp进程,这似乎没有比使用单个容器来运行这两个进程更好的了.然后我可以使用supervisor或类似的东西来保持它们都运行并使用localhost来链接进程. 我还是Docker的新手,所以我做错了什么,或者这是docker中的一个bug? 最佳答案
第二个更新:也许你已经发现了这个,但作为解决方法,我计划映射服务以将数据库共享到主机接口(ej:with -p 5432:5432),并将webapps连接到主机IP(IP) docker0接口:在我的Ubuntu和CentOS中,IP是172.17.42.1).如果重新启动postgres容器,则conteiner的IP将更改,但我将使用172.17.42.1:5432进行访问.缺点是你将该端口暴露给所有容器,并且松散了–link给你的细粒度映射.
—旧的更新: 更正:Docker会将’postgres’映射到webapp容器上/ etc / hosts文件中的容器IP.因此,在webapp容器中,您可以ping“postgres”,它将映射到IP. 第一个更新:我已经看到Docker生成并安装/ etc / hosts,/ etc / resolv.conf等以获得始终正确的信息,但是当重新启动链接容器时这不适用.所以,我(错误地)假设Docker会更新主机文件. – 原始(错误)回复: 添加–hostname = postgres-db(你可以使用anythin,我使用的不同于’postgres’以避免与容器名称的混淆):
Docker会将’postgres-db’映射到容器的IP(检查webapp容器上的/ etc / hosts的内容). 这将允许您从webapp容器运行’ping postgres-db’.如果IP更改,Dockers将为您更新/ etc / hosts. 在Django应用程序中,使用’postgres-db’而不是IP(或者你用于PostgreSql的容器的主机名). 再见! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |