【问题标题】:Access Docker postgres container from another container从另一个容器访问 Docker postgres 容器
【发布时间】:2019-06-13 20:11:33
【问题描述】:

我正在尝试制作一个可移植的解决方案,让我的应用程序容器连接到 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 烧瓶应用程序访问它。

我也将 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 组合解决方案。

【问题讨论】:

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

标签: postgresql docker


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 2017-07-12
    • 2021-03-04
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    相关资源
    最近更新 更多