skip to Main Content

I’m looking for a Docker image that would only have all the necessary components to make calls to an external Postgres database using the psql client in the shell. I do not need to launch a database locally or anything.

I found jbergknoff/postgresql-client, which I haven’t tested, but I’m just mostly surprised there doesn’t seem to be any official image for that.

For now I’m using postgres:12-alpine, but it’s only as part of a CronJob launched in Kubernetes which takes care of triggering a clean up of certain tables every once in a while by calling a Postgres function.

Anyone has something to recommend? Or some insight to share?

2

Answers


  1. IMHO, It’s actually better to create our own Docker image instead of relying on some third party for such trivial need.
    Supply chain security is already tricky enough.

    Here is the content of my docker file PgClientDockerfile:

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

    Here is an excerpt from my 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
    

    I have an .env file with values like:

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

    And here is an example usage (for my use case):

    #!/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()'
    
    
    Login or Signup to reply.
  2. I created an image for the exact purpose, only have the psql client. Here is the image on DockerHub
    https://hub.docker.com/r/codingpuss/postgres-client

    Simply create a container

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

    Then execute the command as you like:

    docker exec -it pgclient psql postgresql://postgres:1@pgdb:5432/postgres -c 'select * from pg_catalog.pg_tables'
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search