重新启动命名容器会分配不同的IP

 虚线老母阳 发布于 2023-01-03 13:29

我试图使用Docker部署我的应用程序,并遇到一个问题,重新启动命名容器为容器分配不同的IP.也许解释我在做什么会更好地解释这个问题:

Postgres在一个名为的单独容器内运行 "postgres"
$ PG_ID=$(docker run --name postgres postgres/image)

我的webapp容器链接到postgres容器
$ APP_ID=$(docker run --link postgres:postgres webapp/image)

将postgres容器映像链接到webapp容器,在webapp容器中插入一个带有postgres容器IP的hosts文件条目.这允许我在我的webapp中指向postgres db postgres:5432(我正在使用Django btw).这一切都很好,除非由于某种原因postgres崩溃.

在我手动停止postgres进程以模拟postgres进程崩溃之前,我验证了postgres容器的IP:

$ docker inspect --format "{{.NetworkSettings.IPAddress}}" $PG_ID
172.17.0.73

现在模拟崩溃我停止postgres容器:

$ docker stop $PG_ID

如果现在我通过使用重启postgres

$ docker start $PG_ID

容器的ip更改:

$ docker inspect --format "{{.NetworkSettings.IPAddress}}" $PG_ID
172.17.0.74

因此,指向webapp容器中的postgres容器的IP不再正确.我通过命名容器docker为它指定一个名称,使用特定的配置,以便您可以可靠地链接容器(网络和卷).如果IP改变,这似乎打败了目的.

如果每次postgres重新启动时我都必须重新启动我的webapp进程,这似乎没有比使用单个容器来运行这两个进程更好的了.然后我可以使用supervisor或类似的东西来保持它们都运行并用于localhost在进程之间进行链接.

我还是Docker的新手,所以我做错了什么,或者这是docker中的一个bug?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有