gpt4 book ai didi

postgresql - 从另一个容器访问 Docker postgres 容器

转载 作者:行者123 更新时间:2023-11-29 12:15:58 25 4
gpt4 key购买 nike

我正在尝试制作一个可移植的解决方案,让我的应用程序容器连接到 postgres 容器。 “便携”是指我可以为用户提供两个 docker run 命令,每个容器一个,它们将始终协同工作。

我有一个在本地 PC 上运行的 postgres docker 容器,我是这样运行它的,

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

我可以使用地址 127.0.0.1:5432 从 python flask 应用程序访问它。

我也将 python 应用程序放在 docker 容器中,但我无法连接到 postgres 容器。

地址 127.0.0.1:5432 无效。

Address 172.17.0.2:5432 DOES 工作(172.17.0.2 是运行 postgres 的 docker 容器的地址)。但是我认为这不可移植,因为我不能保证 postgres 容器 IP 是什么。

我知道 --add-host 标志,但它也要求主机 IP,我希望它是本地主机 (127.0.0.1)。尽管在 --add-host 上有几次点击,但我无法让它工作,因此最终的 docker run 命令在它们运行的​​任何计算机上都是相同的。

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

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

最佳答案

评论来自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

现在 postgres 数据库的 IP 地址是 mydb,这个容器的所有端口都暴露给这个网络中运行的任何其他容器。

现在添加前端应用,

docker run --net mynet -ti -p 80:80 -v mydockerhubaccount/myapp

关于postgresql - 从另一个容器访问 Docker postgres 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54272997/

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