Docker 和 Postgres - 使用 5432 以外的端口时,服务器意外关闭连接错误

Jul*_* W. 5 postgresql psql docker docker-compose

我在使用 Postgres 和 Docker 时遇到了这个奇怪的错误。因此,我的 docker-compose 文件中有两个服务:

\n
version: '3'\nservices:\n  db:\n    image: postgres\n    restart: always\n    ports:\n      - '5432:5432'\n    environment:\n      POSTGRES_PASSWORD: pass123\n\n  test-db:\n    image: postgres\n    restart: always\n    ports:\n      - '5433:5433'\n    environment:\n      POSTGRES_PASSWORD: pass123\n
Run Code Online (Sandbox Code Playgroud)\n

因此,当我运行“docker-compose up -d”时,两个容器都会被安装。命令“docker ps”给了我:

\n
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                                 NAMES\na76fcc56f928   postgres   "docker-entrypoint.s\xe2\x80\xa6"   6 seconds ago   Up 5 seconds   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp             nodejs-nest_iluvcoffe_db_1\n9ab54557063f   postgres   "docker-entrypoint.s\xe2\x80\xa6"   6 seconds ago   Up 5 seconds   5432/tcp, 0.0.0.0:5433->5433/tcp, :::5433->5433/tcp   nodejs-nest_iluvcoffe_test-db_1\n
Run Code Online (Sandbox Code Playgroud)\n

当我尝试连接到映射端口 5432->5432 的容器时,一切都很好。但是当我尝试连接到映射端口 5433->5433 的容器时,出现错误:

\n
server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.\n
Run Code Online (Sandbox Code Playgroud)\n

但是,如果我将端口映射为:

\n
version: '3'\nservices:\n  db:\n    image: postgres\n    restart: always\n    ports:\n      - '5432:5432'\n    environment:\n      POSTGRES_PASSWORD: pass123\n\n  test-db:\n    image: postgres\n    restart: always\n    ports:\n      - '5433:5432'\n    environment:\n      POSTGRES_PASSWORD: pass123\n
Run Code Online (Sandbox Code Playgroud)\n

然后,我将在我的“docker ps”中包含:

\n
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                       NAMES\n5228461a2cff   postgres   "docker-entrypoint.s\xe2\x80\xa6"   6 seconds ago   Up 5 seconds   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   nodejs-nest_iluvcoffe_db_1\n39353d05004c   postgres   "docker-entrypoint.s\xe2\x80\xa6"   6 seconds ago   Up 5 seconds   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp   nodejs-nest_iluvcoffe_test-db_1\n
Run Code Online (Sandbox Code Playgroud)\n

我可以连接到两个容器/postgres 服务器。有人知道为什么吗?为什么我不能使用 5433->5433 端口映射?

\n

Jul*_* W. 4

我相信我明白发生了什么。在容器内部,默认情况下,postgres 将在端口 5432 上运行,即使我映射 ports 指令:

ports:
      - '5433:5433'
Run Code Online (Sandbox Code Playgroud)

为了告诉 postgres 在容器内运行哪个端口,我使用了以下设置:

version: '3'
services:
  db:
    image: postgres
    restart: always
    ports:
      - '5432:5432'
    environment:
      POSTGRES_PASSWORD: pass123

  test-db:
    image: postgres
    restart: always
    ports:
      - '5433:5433'
    environment:
      POSTGRES_PASSWORD: pass123
    command: -p 5433
Run Code Online (Sandbox Code Playgroud)

现在一切正常