我使用默认dockerpostgresql
配置打开了太多连接
我想扩展max_connection
而不使用卷来安装配置(我需要它在默认情况下对我的CI环境可用)。
我尝试使用sed
来编辑配置,但这没有效果。
推荐的覆盖postgresql docker官方镜像默认配置的方法是什么?
运行这个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