提问者:小点点

如何在官方PostgreSQL Docker映像中增加max_connection


我使用默认dockerpostgresql配置打开了太多连接

  • https://hub.docker.com/_/postgres/

我想扩展max_connection而不使用卷来安装配置(我需要它在默认情况下对我的CI环境可用)。

我尝试使用sed来编辑配置,但这没有效果。

推荐的覆盖postgresql docker官方镜像默认配置的方法是什么?


共3个答案

匿名用户

运行这个docker-comp. yml

version: '2'
services:
  postgres:
    image: postgres:10.3-alpine
    command: postgres -c 'max_connections=200'
    environment:
      POSTGRES_DB: pgdb
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
    stdin_open: true
    tty: true
    ports:
    - 5432:5432/tcp

匿名用户

这很简单(您只需使用postgres-N 500覆盖默认的CMD):

docker run -d --name db postgres:10 postgres -N 500

您可以使用以下方式检查:

docker run -it --rm --link db:db postgres psql -h db -U postgres

show max_connections;

max_connections 
-----------------
500
(1 row)

匿名用户

官方镜像提供了一种在DB初始化后运行任意SQL和shell脚本的方法,方法是将它们放入/docker-entrypoint-initdb. d/目录。此脚本:

ALTER SYSTEM SET max_connections = 500;

将让我们更改最大连接限制。请注意,postgres服务器将在初始化脚本运行后重新启动,因此即使像max_connections这样需要重新启动的设置也会在容器首次启动时生效。

如何将此脚本附加到docker容器取决于您如何启动它:

将SQL脚本保存到文件max_conns. sql,然后将其用作卷:

docker run -it -v $PWD/max_conns.sql:/docker-entrypoint-initdb.d/max_conns.sql postgres

使用docker comort,将SQL脚本保存到max_conns. sql文件中,然后在docker-comment.yaml旁边引用它:

version: '3'
services:
  db:
    image: postgres:latest
    volumes:
      - ./max_conns.sql:/docker-entrypoint-initdb.d/max_conns.sql

使用kubernetes,您需要为脚本创建一个配置图:

kind: ConfigMap 
apiVersion: v1 
metadata:
  name: max-conns
data:
  max_conns.sql: "ALTER SYSTEM SET max_connections = 500;"

然后将其与容器一起使用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-example
spec:
  template:
    spec:
      containers:
        - name: postgres
          image: postgres:latest
          volumeMounts:
          - name: max-conns
            mountPath: /docker-entrypoint-initdb.d
      volumes:
        - name: max-conns
          configMap:
            name: max-conns