Как добавить postgres в контейнер?
Разрабатываю restAPI. При написании и тестировании приложения, использовалась субд развернутая на моей системе(наверное это называется локально). Но вот я подобрался к Docker.
Я собрал Docker image моего приложения,при запуске image указал маппинг портов чобы при обращении на локальный порт, запрос перенеправлялся на порт Docker-a.
И вот, пришла пора тестировать мои API в Postman, но вместо заветного response-a я получаю ошибку, что postgres отсутствует на порту 5432. И тут я понял, что в Docker-e видимо экземпляра postgres нет вовсе, либо нужно тоже указывать маппинг postgres-a при старте.
А как же postgres настраивается на docker образе? Желаетельно подход, который будет правильным для комеерческой разработки.
Я запускаю image так:
sudo docker run -p 8080:8080 appname
UPD: Предвижу, что может понадобится редактировать dockerfile. Вот он:
# syntax=docker/dockerfile:1
FROM golang:1.21.4
WORKDIR $GOPATH/src/github.com/udonetsm/cmngb
COPY ./ ./
RUN go build -o ./cmngb .
CMD ["./cmngb"]
UPD2:
Ну и, если быть точнее, ошибка такая:
dial error (dial tcp [::1]:5432: connect: cannot assign requested address
UPD3: Исправлюсь, ошибка означает, что в том postgres что в контейнере отсутствует целевая база данных и пользователь.
Ответы (1 шт):
Правильнее будет использовать Docker compose и собирать каждый сервис в своем контейнере.
И все это собирать вместе через docker-compose.yml, примерно так:
version: '3'
services:
go:
build:
context: .
dockerfile: _docker/app/Dockerfile
depends_on:
- db
container_name: appname
ports:
- "8080:8080"
db:
image: postgres:latest
container_name: pg_db
environment:
POSTGRES_DATABASE: test
POSTGRES_USER: test-user
POSTGRES_PASSWORD: example
ports:
- "3306:3306"