【问题标题】:How to connect to a Postgres database running in local Docker container through locally-run psql command?如何通过本地运行的 psql 命令连接到在本地 Docker 容器中运行的 Postgres 数据库?
【发布时间】:2021-09-25 14:45:12
【问题描述】:

我正在本地机器上运行一个带有香草 Postgres 映像的 docker 容器。我想从我的本地计算机连接到数据库(即,不是从“容器内”)。但是,在尝试连接时,我收到一个错误。

这是我的docker-compose.yml 文件:

version: "3.8"

services:
    db:
        image: postgres
        restart: always
        ports:
            - 5432:5432
        environment:
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD: mypassword

我是这样开始的:

docker-compose run db

这是我的连接方式:

psql -h localhost -p 5432 -U postgres

这会产生错误:

无法连接到服务器:连接被拒绝服务器是否在主机“localhost”(127.0.0.1) 上运行并接受端口 5432 上的 TCP/IP 连接?

如果我在没有 Docker Compose 的情况下启动数据库,相同的连接命令会按预期工作:

docker run --name mypg -p 5432:5432 -e POSTGRES_PASSWORD=password postgres

我可以顺其自然并使用上面的命令。但这似乎表明我对 Docker/Compose 的看法存在缺陷。例如,Docker Compose 的内部 DNS 解析器可能会导致这种方法失败。

有什么想法吗?

版本信息:

psql --version
psql (PostgreSQL) 13.3

我已经阅读了几篇 SO 帖子,包括这些帖子,但它们没有解决或解决我看到的问题:

【问题讨论】:

    标签: postgresql docker-compose psql


    【解决方案1】:

    尝试docker-compose up db 而不是run。使用run 将对您的容器运行一次性命令,而up 将打开容器并使其保持运行,因此另一个应用程序应该能够访问它。

    https://docs.docker.com/compose/faq/#whats-the-difference-between-up-run-and-start

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多