#node.js #postgresql #docker #docker-compose #nestjs
Вопрос:
Я новичок в узлах, гнездах и докерах, но каким-то образом мне была поручена работа по докеризации всех существующих приложений node js.
Я последовал одному из учебников по YouTube и успешно развернул базовый hello world через docker, но в следующем учебнике по YouTube, когда я пытаюсь добавить Postgres в docker, у меня возникают некоторые проблемы при подключении к Postgres.
Я использую рабочий стол docker на Mac.
Вот docker-compose.yml
фрагмент кода моего файла
version: "3.9" # optional since v1.27.0
services:
api:
build:
dockerfile: Dockerfile
context: .
depends_on:
- postgres
environment:
DATABASE_URL: postgres://user:password@postgres:5432/db
NODE_ENV: developement
PORT: 3000
ports:
- "8080:3000"
postgres:
image: postgres:14.0
ports:
- "35000:5432"
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: db
Вот весь журнал ошибок
Репозиторий этого проекта на Github
Заранее благодарю вас за помощь
Комментарии:
1. Я думаю, что проблема была в коде, код API подключается к 127.0.0.1 и не использует env
DATABASE_URL
. Пожалуйста, проверьте структуру кода подключения и убедитесь, что используетеDATABASE_URL
2. Попробуйте изменить имя хоста базы данных, чтобы ваше
api
соединение было включеноpostgres:5432
. Использование127.0.0.1
предназначено для случаев, когда вы хотите подключиться из-за пределов вашей док-сети, и тогда вам потребуется использовать порт127.0.0.1:35000
.3. не могли бы вы прикрепить файл Dockerfile и файл проекта, связанный с al
4. добавлен проект на github github.com/prafful-panwar/docker-node-nest.git @NaorTedgi
5. @Pooya Я также добавил ссылку на репозиторий GitHub. URL-адрес базы данных находится в файле app.module.ts url-адрес файла: process.env.DATABSE_URL,
Ответ №1:
Ваша проблема из-за опечатки в DATABASE_URL
. В коде для подключения базы данных используйте DATABSE_URL
word, но в docker-используется compose DATABASE_URL
.
Вам следует изменить url: process.env.DATABSE_URL
на url: process.env.DATABASE_URL
Комментарии:
1. обновлено, но все та же ошибка
![]()
2. Используются ли
docker-compose up --build
они ?3. докер-составьте
4. Вы должны использовать
--build
аргумент with, потому что вы изменили код и вам нужно сначала построить, а затем запустить снова5. докер-составьте-сборка сработала. большое спасибо.
Ответ №2:
Убедитесь, что ваша строка подключения указана правильно в вашем docker-compose.yml
. Просто передайте хост, порт, пользователя и передайте отдельно, и пусть TypeOrm
обрабатывается соединение.
// app.module.ts
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.POSTGRES_HOST,
port: process.env.POSTGRES_PORT,
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DB,
})
И ваш докер-compose.yml:
# docker-compose.yml
version: '3.9'
services:
api:
build:
dockerfile: Dockerfile
context: .
depends_on:
- postgres
environment:
- POSTGRES_HOST=postgres
- POSTGRES_PASSWORD=promo-pass
- POSTGRES_USER=promo-user
- POSTGRES_DB=promo-api-db
- POSTGRES_PORT=5432
postgres:
container_name: postgres
image: postgres
environment:
POSTGRES_USER: promo-user
POSTGRES_PASSWORD: promo-pass
POSTGRES_DB: promo-api-db