postgresql - 更改 postgres docker 容器中 tcp_keepalives 设置的正确方法

标签 postgresql docker tcp docker-compose

我想更改 postgres 配置的以下参数,tcp_keepalives_counttcp_keepalives_idletcp_keepalives_interval

建议的更改方法是什么?

以下是我的docker-compose.yml

postgres:
  restart: always
  image: postgres:latest
  volumes:
    - /data:/var/lib/postgresql
  ports:
    - "5432:5432"
  environment:
    - POSTGRES_USER=admin
    - POSTGRES_PASSWORD=postgres
    - POSTGRES_DB=postgres

更新

我最终修改了我的docker-compose文件

postgres:
  restart: always
  image: postgres:latest
  container_name: postgres
  volumes:
    - /data:/var/lib/postgresql
  ports:
    - "5432:5432"
  environment:
    - POSTGRES_USER=admin
    - POSTGRES_PASSWORD=postgres
    - POSTGRES_DB=postgres
  command: postgres -c tcp_keepalives_idle=60 -c tcp_keepalives_interval=60 -c tcp_keepalives_count=60

最佳答案

您可以将选项放入 postgresql.conf 文件中,并更改 postgres 命令以指向自定义配置。如果您想对所有数据库执行此操作,您可以使用简单的 Dockerfile 从基础镜像构建自定义镜像:

FROM postgres
COPY ./postgresql.conf /etc/postgresql/postgresql.conf
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]

conf 文件可以包含您需要的任何设置:

tcp_keepalives_count=10
tcp_keepalives_idle=60
tcp_keepalives_interval=60

构建该镜像并运行它,您将获得默认镜像的所有行为(初始化数据库、设置密码等),但使用您的自定义配置:

docker exec -it 0a bash
root@0a3e2cc18b76:/# psql -U postgres
psql (9.5.4)
Type "help" for help.  

postgres=# SHOW config_file;
    config_file
    ---------------------------------
    /etc/postgresql/postgresql.conf
    (1 row) 

如果您不想构建镜像,则可以在 Compose 文件中执行类似的操作:添加一个卷,将本地conf 文件挂载到容器中,并在自定义命令中指定位置。

关于postgresql - 更改 postgres docker 容器中 tcp_keepalives 设置的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39656989/

相关文章:

sql - 仅当列值与其他列不同时才选择

reactjs - 使用 docker-compose 对 React 应用程序进行 Dockerize

java - 通过套接字接收文件,TCP 连接卡住

r - 在rhive.env()上出现错误:无法连接到x.x.x.x上的Rserver

python - SQLAlchemy/psycopg2 : JSONB columns are being returned as strings instead of dicts Python

ruby - 如何使用 Sequel gem 将 full_text_search 与 unaccent 结合起来?

sql - PostgreSQL:如何获取 GROUP BY 的 max()?

python - 解码Jpeg/内容: 0 'refers to a tensor that does not exist

java - 如何将Docker容器作为持久服务器运行?

java - 使用 TCP 与 Spring 集成生成 MessageSource