如何通过端口5432连接到容器中的Postgres数据库

时间:2019-05-02 12:20:38

标签: postgresql dockerfile

我正在使用以下命令运行一个postgres Docker容器:(参考:https://docs.docker.com/engine/examples/postgresql_service/

docker build -t eg_postgresql .

docker run --rm -P --name pg_test eg_postgresql

这有效,但是端口号是动态的。我可以通过提供端口号连接到数据库。 (我在docker ps命令中看到的端口) 我想从Python连接到这个docker数据库,所以我需要一个静态端口号。

我尝试了以下参数:

-p 127.0.0.1:5432:5432

-p 5432:5432

在这种情况下,docker容器的端口号设置为5432。但是,我无法连接到数据库。我收到docker user does not exist错误消息。 您有什么建议?

1 个答案:

答案 0 :(得分:1)

我从您发布的链接中获取了Dockerfile。用

构建容器后

docker build -t eg_postgresql .

我从

开始启动容器

docker run --rm -p 5432:5432 --name pg_test eg_postgresql(将本地主机端口5432绑定到容器端口5432)

然后我尝试与之建立联系

psql -h localhost -p 5432 -d docker -U docker --password

它就像一种魅力。如果收到消息docker用户不存在,请仔细检查Dockerfile中的所有步骤是否在docker build命令期间成功执行,因为在命令RUN /etc/init.d/postgresql start &&\ psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\ createdb -O docker docker中完成了docker用户的创建。还请确保本地主机上没有运行PostgreSQL服务器,以便可以确保尝试在容器内连接到PostgreSQL。