Как добавить 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 шт):

Автор решения: aletoropov

Правильнее будет использовать 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"
→ Ссылка