В моем проекте symfony я создаю док-контейнер для postgresql:
php:
build:
context: "."
dockerfile: ./docker/php/Dockerfile
volumes:
- .:/var/www/symfony:rw
depends_on:
- postgres
postgres:
image: postgres:13-alpine
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
POSTGRES_DB: mydb
ports: [5432]
В моем файле .env я пытаюсь подключиться к базе данных следующим образом:
DATABASE_URL = "postgresql://root:root@postgres:5432/mydb?serverVersion=15&charset=utf8"
Когда я пытаюсь перейти на БД, я получаю следующую ошибку:
[critical] Error thrown while running command "make:migration". Message: "An exception occurred in the driver: SQLSTATE[08006] [7] could not translate host name "postgres" to address: nodename nor servname provided, or not known"
Что мне не хватает?
Не могли бы вы проверить, возникает ли ошибка, когда вы указываете атрибут hostname
с помощью службы postgres, см. docs.docker.com/compose/compose-file/#hostname
Это не похоже на правильный файл для создания докеров.
Я думаю, что вы пропустили настройку межконтейнерной внутренней сети. Это не идет по умолчанию.
Присоедините сервисы php
и postgres
к сети (например, internal
):
services:
php:
...
networks:
- internal
...
postgres:
...
networks:
- internal
...
networks:
internal:
Этот последний бит определения сети намеренно оставлен пустым — мы предполагаем режим моста по умолчанию, но вы можете определить любой, который вам нравится.
Да, сеть — это решение.
технически это означает, что имя хоста «postgres» в
...root@postgres...
не может быть преобразовано в IP-адрес, поэтому можно добавить его в /etc/hosts или напрямую подключиться к ip, например, 127.0.0.1 ... не совсем уверен, хотя