postgresql – Postgres 9.1的Docker容器没有将端口5432暴露给主机

postgresql – Postgres 9.1的Docker容器没有将端口5432暴露给主机,第1张

概述我正在尝试使用Docker容器来运行PostgreSQL服务器,并从我的主机连接它. 我的配置是: >主机:Mac OS X 10.10.5 > Docker 1.10.1 我做到了这个: 第1步:为永久postgres数据创建一个卷 docker volume create --name postgres_data 第2步:启动postgres实例 更新:正如评论中所建议的,我在运行容器时指定了 我正在尝试使用Docker容器来运行Postgresql服务器,并从我的主机连接它.

我的配置是:

>主机:Mac OS X 10.10.5
> Docker 1.10.1

我做到了这个:

第1步:为永久postgres数据创建一个卷

docker volume create --name postgres_data

第2步:启动postgres实例

更新:正如评论中所建议的,我在运行容器时指定了端口映射

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

第3步:通过执行以下 *** 作连接到Docker实例:

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

就像我在我的主机上本地安装了Postgres一样.

问题是端口5432没有暴露.所以,我无法连接它:

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)

我可以毫无问题地连接我的本地postgres实例(查看命令的输出:是为Mac OS X编译的postgres,我的主机):

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)

现在有趣的部分.当主机Postgresql实例运行时,我再次启动我的Docker实例.

开始! (它不应该).我甚至可以使用docker run连接…

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'

如果我现在运行select version(),它会显示在我的docker实例中运行的postgres,同时postgres在我的主机中运行,在docker之外,使用相同的5432端口. (看看输出,是为Debian编译的postgres,postgres中的 *** 作系统:9.1容器)

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实例连接.我怎么能这样做?

这是2018年,我遇到了类似的问题.对我来说,解决方案似乎是对码头工具的道具顺序.例如这导致没有港口暴露;

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

虽然这很好(图像暴露端口5432如预期的那样);

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

总结

以上是内存溢出为你收集整理的postgresql – Postgres 9.1的Docker容器没有将端口5432暴露给主机全部内容,希望文章能够帮你解决postgresql – Postgres 9.1的Docker容器没有将端口5432暴露给主机所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存