【问题标题】:Running psql command from a docker container从 docker 容器运行 psql 命令
【发布时间】:2020-09-14 07:05:24
【问题描述】:

我无法使用 docker-compose 将 postgresDB 连接到我的应用程序

我对 docker compose 的理解是,我可以将两个容器组合起来,让它们相互通信。假设我在appcontainer 中有一个运行 psql 命令的应用程序(只是一个带有os.command("psql") 的单行python 脚本)。由于app 容器没有安装postgres,它不能自己运行psql。但是,我认为在 docker-compose.yml 中组合两个容器可以让我运行 psql,但显然不行。

我在这里错过了什么?

我正在使用 2 张 postgres 图像,因为我试图在两个 dbms 之间找到回归错误

version: "3"
services:
    app:
        image: "app:1.0"
        depends_on: 
            - postgres9
            - postgres12
        ports:
            - 8080:80 
    postgres9:
        image: postgres:9.6
        environment:
            POSTGRES_PASSWORD: mysecretpassword
            POSTGRES_USER: postgres
            POSTGRES_DB: test_bd
        ports:
            - '5432:5432'
    postgres12:
        image: postgres:12
        environment:
            POSTGRES_PASSWORD: mysecretpassword
            POSTGRES_USER: postgres
            POSTGRES_DB: test_bd
        ports:
            - '5435:5435'

【问题讨论】:

  • app 容器中,您应该能够telnet postgres9 5432。你得到了什么?

标签: postgresql docker docker-compose psql


【解决方案1】:

每个 Docker 容器都有一个独立的文件系统。您永远不能直接从主机或其他容器的文件系统运行命令;你想运行的任何东西都需要安装在容器中(实际上,在它的镜像的 Dockerfile 中)。

如果你想运行像psql 这样的工具,它需要安装在你的镜像中。你没有说你的基础镜像是什么,但是如果它是基于 Debian 或 Ubuntu 的,你需要安装 postgresql-client 包:

RUN apt-get update \
 && DEBIAN_FRONTEND=noninteractive \
    apt-get install --no-install-recommends --assume-yes \
      postgresql-client

这里的正确方法是向项目的 Python Pipfilesetup.py 和/或 requirements.txt 添加标准 Python PostgreSQL 客户端库,例如 psycopg2,并使用该库而不是使用该库psql。您还需要 PostgreSQL C 库头文件来安装该软件包;安装 Debian libpq-dev 软件包,而不是 postgresql-client

【讨论】:

    【解决方案2】:

    在您的情况下,这两个容器中都有 postgres 实例,它们运行在不同的主机上(除了带有app 的主机)。您需要在psql 命令中指定正确的主机。它可能看起来像(对于 postgres12 容器):

    PGPASSWORD="mysecretpassword" psql -h postgres12 -d test_bd -U postgres
    

    【讨论】:

      猜你喜欢
      • 2020-06-26
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2020-07-28
      • 2022-11-10
      相关资源
      最近更新 更多