Docker + Postgres не может настроить работу - PullRequest
0 голосов
/ 03 апреля 2019

Я только начинаю работать с докером и не могу подключить API к моей базе данных.Я получаю connection refused.

Я получаю это в журналах, что, по-видимому, означает, что переменные окружения не передаются: The files belonging to this database system will be owned by user "postgres".

Кроме того, docker exec -ti [container_id] psql -U postgres работает, однако docker exec -ti [container_id] psql -U docker -> role "docker" does not exist

Я также пытался COPY вставить файл init.sql в базу данных Dockerfile, но, похоже, он не дал никакого эффекта.

Этомой docker-compose.yaml.Есть что-то, что выделяется как неправильное?

version: '2'
services:
  db:
    build: ./db
    volumes:
      - ./db/pgdata:/pgdata
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=docker
      - POSTGRES_PASSWORD=docker
      - POSTGRES_DB=xx
      - PGDATA=/pgdata

  api:
    build:
      context: .
      args:
        app_env: ${APP_ENV}
    volumes:
      - .:/go/src/github.com/x/xx
    ports:
      - "5000:8080"
    links:
      - db

Это мой Dockerfile

FROM golang
ARG app_env
ENV APP_ENV $app_env

# Copy the local package files to the container's workspace
COPY . /go/src/github.com/x/xx
WORKDIR /go/src/github.com/x/xx

# added vendor services will need to be included here
RUN go build

# if dev setting will use pilu/fresh for code reloading via docker-compose volume sharing with local machine
# if production setting will build binary
CMD if [ ${APP_ENV} = production ]; \
    then \
    api; \
    else \
    go get github.com/pilu/fresh && \
    fresh -c recompile.conf; \
    fi

# Document that the container uses port 8080
EXPOSE 8080

А это мой Dockerfile в разделе ./db

FROM postgres:latest
EXPOSE 5432

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Из того, что я вижу, похоже на проблему с сетью.Трудно отлаживать ваши файлы без полной области видимости, поэтому вот документ о внутренних сетях и о том, как разрешить соединения между контейнерами.

Кроме того, здесь полностью работающий docker-compose.ymlс базой данных Postgres и мостовой связью:

version: '3.1'

services:

  postgres:
    container_name: postgres
    image: postgres:11-alpine
    network_mode: bridge
    volumes:
      - ./data:/var/lib/postgresql/data
    ports:
      - 5432:5432
    environment:
      - "POSTGRES_PASSWORD=whatever"

  clientApp:
    container_name: cinema
    image: your/image:latest
    network_mode: bridge
    external_links:
      - postgres
0 голосов
/ 03 апреля 2019

Если вы используете Windows, это может не работать.См. Этот выпуск .

В качестве альтернативы вы можете использовать именованный том, например:

postgresql:
  image: ./db
  volumes:
  - postgres:/var/lib/postgresql/data
volumes:
  postgres:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...