当前位置: 首页 > 面试题库 >

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

白星海
2023-03-14
问题内容

我正在尝试为将我的应用程序容器连接到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

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

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

地址127.0.0.1:5432无效。

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

我知道该--add-host标志,但是它也在询问host-ip,我想成为本地主机(127.0.0.1)。尽管--add- host遭受了几次打击,但我还是无法使它正常工作,因此最终dockerrun命令在运行它们的任何计算机上都可以相同。

我也尝试过这样:从另一个容器访问的docker容器端口

我的情况是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


 类似资料:
  • 问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link

  • 我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。 我可以从主机访问db容器,也可以从主机访问webserver。 我可以访问主机上的wls作为

  • 我正在尝试以下操作: 在一个带有暴露端口的容器中旋转MySQL 5.5,例如4200。 在一个带有暴露端口的容器中旋转MySQL 5.7,例如4300。 旋转golang容器以运行我的应用程序。 我的想法是我需要我的测试在不同的数据库版本上运行。 为此,我需要能够与golang容器中的每个sql容器进行对话。 我试过的: 方法1-使用--link: GO LANG应用程序容器 方法2-使用--ne

  • 我有两个Docker容器在同一个网络中运行,我希望其中一个通过spring Webclient调用另一个。我确信他们都在同一个网络中- “finishConnect(…)失败:连接被拒绝:附件加载程序秒/172.21.0.5:80;嵌套异常为io。内蒂。频道AbstractChannel$AnnotatedConnect异常:finishConnect(…)失败:连接被拒绝:附件加载程序秒/172

  • 在页面存储Python Flask微服务中,我尝试使用主机名master-db访问MySQL数据库,但该名称无法解析。

  • 我希望我的UI通过我的节点服务器获取数据,其中每个都是一个独立的容器。如何使用docker-compose文件连接它们? 我有三个运行mongodb、node server和oracle jet for ui容器,我想通过oraclejet ui访问node API,通过node访问mongo db,所以我定义了这个Docker-Compose。mongo和node工作之间的链接。