#docker
#docker
Вопрос:
Я пытаюсь настроить node.js приложение, которое ранее работало на Heroku с дополнением postgres в качестве производственной базы данных. Не удается подключиться к базе данных из контейнера.
Файл Docker
FROM node:8
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["npm","start"]
Файл Docker Compose
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
- "5432:5432"
env_file: .env
extra_hosts:
- "iondev:172.27.27.59"
Ошибка
web_1 | {"level":30,"time":1553864230376,"msg":"Narrafy listening on port 5000","pid":16,"hostname":"961f47819c3e","v":1}
web_1 | {"level":50,"time":1553864230399,"msg":"Failed to connect to DB.","pid":16,"hostname":"961f47819c3e","v":1}
web_1 | {"level":50,"time":1553864230399,"msg":"Connection terminated unexpectedly","pid":16,"hostname":"961f47819c3e","type":"Error","stack":"Error: Connection terminated unexpectedlyn at Connection.con.once (/usr/src/app/node_modules/pg/lib/client.js:200:9)n at Object.onceWrapper (events.js:313:30)n at emitNone (events.js:106:13)n at Connection.emit (events.js:208:7)n at Socket.<anonymous> (/usr/src/app/node_modules/pg/lib/connection.js:130:10)n at emitNone (events.js:111:20)n at Socket.emit (events.js:208:7)n at endReadableNT (_stream_readable.js:1064:12)n at _combinedTickCallback (internal/process/next_tick.js:139:11)n at process._tickCallback (internal/process/next_tick.js:181:9)","v":1}
Комментарии:
1. Можете ли вы поделиться сообщением об ошибке, которое вы получаете из своего приложения Node, и вашим файлом Dockerfile (без секретов)?
2. Установите оболочку в свой контейнер
docker run -it --entrypoint=bash <imagename>
и попробуйте а) проверить, доступен ли целевой хост / порт изнутри контейнера:nc -zv -w 2 <db-host> 3306
б) попробуйте подключиться к нему вручную;mysql -u <username> -p<password> -p <databasename>
; вам понадобятся соответствующие инструменты на контейнере
Ответ №1:
Без dockerfile невозможно отладить эту проблему. Скорее всего, проверьте свои учетные данные DB и убедитесь, что вы передаете их как переменную ENV.
Вы можете проверить журналы, используя docker logs <идентификатор контейнера>.
Или используйте команду docker exec для проверки переменных среды.
Комментарии:
1. В моем файле .env: у меня есть что-то вроде DATABASE_URL=postgresql://172.27.27.59:5432/postgres