【问题标题】:Postgres lean Docker image containing only "psql" clientPostgres 精简 Docker 映像仅包含“psql”客户端
【发布时间】:2022-06-28 18:01:46
【问题描述】:

我正在寻找一个 Docker 映像,它只有在 shell 中使用 psql 客户端调用外部 Postgres 数据库所需的所有组件。我确实不需要在本地或任何地方启动数据库。

我找到了jbergknoff/postgresql-client,我没有测试过,但我很惊讶似乎没有任何官方图片。

目前我正在使用postgres:12-alpine,但它只是作为在 Kubernetes 中启动的 CronJob 的一部分,它负责通过调用 Postgres 函数每隔一段时间触发对某些表的清理。

有人推荐吗?或者分享一些见解?

【问题讨论】:

  • 使用单个 RUN apt-get update && apt-get install 命令构建映像 FROM ubuntu 并不难。不过,大多数情况下,直接从主机运行像 psql 这样的交互式工具比将它们打包在容器中和 sudo docker run --rm -it registry.example.com/psql 进行此类任务更容易。
  • 如果您只需要定期运行某些查询,您可以查看pg_cron,它就是这样做的。
  • 精确度:我们使用来自Azure 的托管 Postgres 服务器,这实际上意味着我们不能从主机本身执行命令,也不能使用 pg_cron,因为它不受支持。

标签: postgresql docker psql


【解决方案1】:

恕我直言,创建我们自己的 Docker 映像实际上比依赖第三方来满足这种微不足道的需求要好。 供应链安全已经够棘手了。

这是我的docker文件PgClientDockerfile的内容:

FROM alpine:3.15
RUN apk --no-cache add postgresql12-client
ENTRYPOINT [ "psql" ]

这是我docker-compose.yml的摘录:

version: '3.7'
services:
  pg_client:
    environment:
      PGDATABASE: ${pg_database}
      PGHOST: ${pg_host}
      PGPORT: ${pg_port}
      PGUSER: ${pg_user}
      PGPASSWORD: ${pg_password}
    build:
      context: .
      dockerfile: PgClientDockerfile

我有一个 .env 文件,其值如下:

pg_database=mydb
pg_host=mydbhost
pg_port=5432
pg_user=myuser
pg_password=mypassword

这是一个示例用法(对于我的用例):

#!/usr/bin/env bash

docker-compose run --rm pg_client -c 'drop trigger if exists my_trigger on my_table RESTRICT'
docker-compose run --rm another_docker_service ./run_batch_insert.sh
docker-compose run --rm pg_client -c 'create trigger my_trigger after insert or update or delete or truncate on my_table for each statement execute procedure refresh_my_table_finder()'

【讨论】:

    【解决方案2】:

    我为确切目的创建了一个图像,只有 psql 客户端。这是 DockerHub 上的图像 https://hub.docker.com/r/codingpuss/postgres-client

    只需创建一个容器

    docker run -dit --network=local_net --name=pgclient codingpuss/postgres-client
    

    然后随意执行命令:

    docker exec -it pgclient psql postgresql://postgres:1@pgdb:5432/postgres -c 'select * from pg_catalog.pg_tables'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 2020-01-26
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多