我试图使用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?