当前位置: 首页 > 知识库问答 >
问题:

Postgres 9.1的Docker容器不向主机公开端口5432

公孙向荣
2023-03-14
  • 主机:Mac OS X 10.10.5
  • Docker 1.10.1

我做过这样的事:

步骤1:为永久postgres数据创建卷

docker volume create --name postgres_data
docker run --name my_postgres_container -e POSTGRES_PASSWORD=my_password -v postgres_data:/var/lib/postgresql/data -p 5432:5432 -d postgres:9.1
docker run -it --link my_postgres_container:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
psql -h localhost -p 5432 -U postgres

sudo lsof-i-p grep-i“listen”-->没有打开端口5432

更新2:更陌生。我也这样做过:

阻止Docker。然后,在我的主机中运行一个普通的PostgreSQL 9.4.4实例(这里不涉及docker,只在Mac OS X主机中运行postgres,监听端口5432)。一切正常:

sudo lsof -i -P | grep -i "postgres"

postgres  14100          jorge    6u  IPv4 0x780274158cebef01      0t0  TCP localhost:5432 (LISTEN)
psql -h localhost -U postgres -c "select version()"
                                                                version
---------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.4.4 on x86_64-apple-darwin14.3.0, compiled by Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn), 64-bit
(1 row)
docker run -it --link my_postgres_instance:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
postgres=# select version();
                                            version
------------------------------------------------------------------------------------------------
 PostgreSQL 9.1.20 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit
(1 row)

为什么?

有道理吗?我的最终目标是在另一个Docker容器中运行一个Django应用程序,并与我的Postgres实例连接。我怎么能这么做?

共有1个答案

劳韬
2023-03-14

现在是2018年,我也遇到了类似的问题。对我来说,解决办法似乎是用道具的顺序来停靠。例如,这导致没有港口暴露;

docker run-d--name posttest postgres:alpine-e postgres_password=fred-p 5432:5432

虽然这运行良好(图像曝光端口5432如预期);

 类似资料:
  • 我可能遗漏了一些可笑的东西,但我试图向我的主机(Mac)公开的每个docker容器似乎都不起作用。我可以看出这些容器正在运行,并且似乎已经正确地暴露在我选择的端口中。我错过了什么明显的东西吗?任何帮助都将不胜感激。 我下载了最新的ElasticSearch图像:https://www.elastic.co/guide/en/elasticsearch/reference/current/docke

  • 根据定义,在docker-compose文件中,函数是在主机端口还是在容器端口? 遵循约定还是约定? 上面的示例代码究竟是如何处理端口的?

  • 我有一个正在运行的MySQL容器,我在里面导入了很多数据(花了我几个小时)。 现在,我想在主机上使用GUI应用程序(DBeaver)从这个容器中查询数据。有没有一种方法可以将正在运行的容器的网络公开给主机,以便连接到它? 我一直在四处寻找,到目前为止最有希望的选择是运行一个带有标签的新容器,但是当我这样做的时候,所有导入的数据都不见了。 谢谢你!

  • 当我在一台docker主机上为同一个web映像启动两个docker容器时。 两个docker容器在同一端口监听 两个集装箱的端口映射到docker主机的不同端口:, 要从docker主机外部访问两个容器,需要通过访问docker主机ip和端口或 是否有一种解决方案可以通过ip和端口从docker主机外部访问docker容器,,而无需端口映射? 不同dock主机上的所有docker容器都可以直接相互

  • 我向主机公开contaners的docker端口 然后,我尝试显示所有侦听端口,以便使用netstat进行调试,例如: 奇怪的是netstat不会显示我的带有暴露端口的docker容器,尽管它们正在监听并回复浏览器。 如何让显示这些暴露的端口? 更新:我在Debian 8 Jessie上运行这个。我是这么做的: docker在此报告将容器端口转发到主机。此外,如果我停止工作流nginx容器,它将停

  • 我想从一个服务器设置服务多个站点: 到目前为止,我只发现docker在使用静态IPS时进行端口重定向。 是否可以通过主机名使用docker进行端口重定向? 我使用一个免费的亚马逊EC2 Insance。 谢谢博