Postgres,本地安装的实例干扰了 Docker 个实例

Postgres, Local installed instance interfered with Docker instance

Windows 10-专业版。安装了本地 Postgres 并且工作正常。

有了它运行ning,VSC终端,docker-compose up以下就可以了:

version: '3.8'
services:
  postgres:
    image: postgres:10.4.2
    ports:
      - '5432:5432'
    volumes:
      - ./sql:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass1
      POSTGRES_DB: db

但是 PSQL shell 总是抱怨用户密码验证失败。

正在从 Windows 服务和 docker-compose upPSQL shell 身份验证和查询停止 postgres 服务。但是 VSC 终端一直在抱怨另一件事:

FATAL:  password authentication failed for user "postgres"
DETAIL:  User "postgres" has no password assigned.
Connection matched pg_hba.conf line 95: "host all all all md5"

当docker容器实例为运行ning时如何停止上述错误?此外,可以同时 运行 本地和 docker?

希望您享受容器之旅!

我试图按原样执行您的 docker-compose 但无法获取 postgres:10.4.2 图像:

❯ docker-compose up
[+] Running 0/1
 ⠿ postgres Error                                                                                                           2.1s
Error response from daemon: manifest for postgres:10.4.2 not found: manifest unknown: manifest unknown

所以我决定改用 postgres:14.2。由于我没有您的 sql 脚本,我将注释掉音量部分。

这是我的 docker-compose 的样子:

version: '3.8'
services:
  postgres:
    image: postgres:14.2
    ports:
      - '5432:5432'
    # volumes:
    #   - ./sql:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass1
      POSTGRES_DB: db

所以,当执行撰写时,我得到了这个:

❯ docker-compose up -d
[+] Running 1/1
 ⠿ Container postgre-local-and-dockercompose-71984505-postgres-1  Started

❯ docker ps
CONTAINER ID   IMAGE                                COMMAND                  CREATED          STATUS          PORTS
         NAMES
4b90573f6108   postgres:14.2                        "docker-entrypoint.s…"   18 seconds ago   Up 15 seconds   0.0.0.0:5432->5432/tcp      postgre-local-and-dockercompose-71984505-postgres-1

当我连接到容器时:

❯ docker exec -it  postgre-local-and-dockercompose-71984505-postgres-1 bash
root@4b90573f6108:/#

并执行此命令以连接到您创建的数据库并使用“pass1”密码连接:

root@4b90573f6108:/# psql --username=$POSTGRES_USER -W --host=localhost --port=5432 --dbname=$POSTGRES_DB
Password:
psql (14.2 (Debian 14.2-1.pgdg110+1))
Type "help" for help.

db=#

一切都很好。

因此,我建议您使用我尝试过的 postgres:14.2 图像(用最后一个安全问题修补)并进行相同的测试。 如果你想让我准确地测试你在做什么,只需发送你的 sql 脚本。

要回答你的第二个问题,是的,可以 co-run 本地和 docker postgres 实例

你只需要 port-forward 你的容器的 postgresql 端口到另一个端口,像这样:

version: '3.8'
services:
  postgres:
    image: postgres:14.2
    ports:
      - '5433:5432'
    # volumes:
    #   - ./sql:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass1
      POSTGRES_DB: db

因为没有端口冲突(你的本地数据库在 5432 上是 运行 而你的数据库在 5433 上是 docker),一切都会正常工作(我将使用 dbeaver 尝试连接):

完美!

希望我回答了你的问题。

bguess.