我的 docker postgres 数据库容器的连接数从 11 开始?

The number of connections to my docker postgres database container starts at 11?

我最近开始学习Docker。我使用 Phoenix 应用程序设置了一个容器,并将其数据库迁移到另一个使用 Postgres 12.4 的容器。我收到“太多客户端连接错误”,但在我将限制从 10 增加到 100 后这种情况消失了。

我进入数据库,发现有 11 个数据库连接到应用程序的数据库应用程序。我不确定这些连接是从哪里来的,因为除了设置数据库或执行迁移之外,我在数据库启动时没有做任何事情。这些联系的来源是什么?

这是我的 Ecto.Repo 设置:

# Configure your database
config :discuss, Discuss.Repo,
  url: "postgres://postgres:postgres@db:5432/discuss_dev",
  username: "postgres",
  password: "postgres",
  database: "discuss_dev",
  hostname: "db",
  port: 5432,
  show_sensitive_data_on_connection_error: true,
  pool_size: 10

这是我的 docker-compose.yaml:

version: '3.6'
services:
  db:
    environment:
      PGDATA: /var/lib/postgresql/data/pgdata
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_DATABASE: discuss_dev
      POSTGRES_HOST_AUTH_METHOD: trust
    image: 'postgres:12-alpine'
    restart: always
    ports:
      - "11005:5432"
    expose:
      - "11005"
    volumes:
      - 'pgdata:/var/lib/postgresql/data'
  web:
    build: .
    depends_on:
      - db
    environment:
      MIX_ENV: dev
    env_file:
      - .env
    ports:
      - "11001:4000"
    expose:
      - "11001"
    volumes:
      - .:/app
volumes:
  pgdata:

您的池大小是 10,您建立了另一个连接(可能不是通过池)以查看您有多少个连接。如果Ecto的pooler急于建立连接(我不知道是不是),那么很容易看出10+1应该是11.

如果您想进一步调查,pg_stat_activity 将显示有关每个连接的大量信息,例如它来自哪个 IP 地址,application_name 是什么,以及当前或最后一个连接是什么执行的查询是。