Docker - host.docker.internal”(192.168.65.2)拒绝连接

lil*_*get 5 postgresql environment-variables docker

我正在尝试在 Symfony 和 Docker 中连接我的 PostgreSql 数据库并收到错误:

docker-compose.yml

services:
db:
    image: postgres:${POSTGRES_VERSION:-12}-alpine
    environment:
        POSTGRES_DB: ${POSTGRES_DB:-my_db}
        POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-root}
        POSTGRES_USER: ${POSTGRES_USER:-root}
    volumes:
        - $PWD/postgres-data:/var/lib/postgresql/data:rw
    profiles:
        - db-in-docker
    ports:
        - "5432:5432"
    networks:
        - symfony
Run Code Online (Sandbox Code Playgroud)

.env.dev.local

DATABASE_URL="postgresql://root:root@host.docker.internal:5432/my_db?serverVersion=12&charset=utf8"
Run Code Online (Sandbox Code Playgroud)

SQLSTATE[08006] [7] 无法连接到服务器:连接被拒绝

    Is the server running on host "host.docker.internal" (192.168.65.2) and accepting  
    TCP/IP connections on port 5432?
Run Code Online (Sandbox Code Playgroud)

我埃文编辑了我的 /etc/hosts 文件以将此主机连接到127.0.0.1

由于这是在我的 Docker 主机上运行的 Postgres 数据库,因此我使用的是 host.docker.internal,它映射到 Mac 或 Windows 上的主机 IP,使用 127.0.0.1 或 localhost 将导致代码尝试连接到同一个容器运行代码,该代码没有运行数据库。

怎么解决这个问题呢?

小智 1

如果Symfony也在docker中运行,你可以尝试直接在docker-compose.yml中定义ENV并传递postgres“服务”名称/别名(docker将解析此名称)

像这样的东西(在symfony服务定义中)

 environment:
      - DATABASE_URL="postgresql://root:root@db/my_db?serverVersion=12&charset=utf8"
Run Code Online (Sandbox Code Playgroud)

其中“db”是 postgres 的服务名称

我有类似的问题,对我来说这个别名有帮助。