从另一个容器访问Docker中的postgres容器

14

我正在尝试制作一个便携式解决方案,使我的应用程序容器可以连接到一个postgres容器。所谓“便携式”,是指我可以给用户两个docker run命令,每个容器一个,它们将始终配合使用。

我在本地计算机上运行了一个postgres docker容器,我是这样运行它的:

docker run -p 5432:5432 -v $(pwd)/datadir:/var/lib/postgresql/data -e POSTGRES_PASSWORD=qwerty -d postgres:11

我能够从Python Flask应用程序访问它,使用地址127.0.0.1:5432

我也将Python应用程序放在了Docker容器中,并且我在连接到Postgres容器时遇到了问题。

地址127.0.0.1:5432无效。

地址172.17.0.2:5432有效(172.17.0.2是运行Postgres的Docker容器的地址)。但是,我认为这不够具有可移植性,因为我无法保证Postgres容器的IP地址是什么。

我知道有--add-host标志,但它还要求主机IP,我希望它是本地主机(127.0.0.1)。尽管有几个命中--add-host的结果,但我无法让它们起作用,以便最终的Docker运行命令可以在任何计算机上运行时都相同。

我也尝试过这个:docker container port accessed from another container

我的情况是Postgres和myApp将成为运行在同一台计算机上的容器。我更喜欢非Docker组合的解决方案。


2
在您的情况下,创建一个用户定义网络 - 可能是桥接网络 -> 将您的容器加入该网络。然后您的容器可以通过容器名称相互调用。 - Truong Dang
1个回答

8

来自Truong的评论让我尝试这种方法(再次尝试),最终我让它工作了。以下是我的步骤,希望对其他人有所帮助。问题的关键是需要一个容器以静态的方式访问另一个容器。使用用户定义的网络就是答案,因为您可以给一个容器命名,从而通过该名称引用该容器的 IP。

我的步骤:

docker network create mynet
docker run --net mynet --name mydb -v $(pwd)/datadir:/var/lib/postgresql/data -e POSTGRES_PASSWORD=qwerty -d postgres:11

现在,PostgreSQL数据库的IP地址是mydb,并且该容器的所有端口都暴露给在此网络中运行的任何其他容器。现在添加前端应用程序,
docker run --net mynet -ti -p 80:80 -v mydockerhubaccount/myapp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接