Администратор и миграция не могут подключиться к Postgresql Docker контейнеру - PullRequest
0 голосов
/ 04 мая 2020

У меня есть три контейнера docker (postgresql, adminer и go / migrate), и я предоставил хосту порты adminer и postgres. Я могу получить доступ к администратору в моем браузере, и postico также может подключиться к БД. Когда я пытаюсь подключиться к БД изнутри администратора, он выдает эту ошибку:

SQLSTATE[08006] [7] could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP
connections on port 5432? could not connect to server: Address not available
Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432?

Контейнер переноса также выдает эту ошибку:

error: dial tcp: 127.0.0.1:5432: connect: connection refused

Так Очевидно, существует проблема с тем, как контейнеры могут общаться друг с другом. Нужно ли создавать docker сеть?

version: '3.1'

services:
  db:
    image: postgres
    environment:
        POSTGRES_DB: mydbname
        POSTGRES_USER: mydbuser
        POSTGRES_PASSWORD: mydbpwd
    ports:
      - "5432:5432"

  migrate:
    image: migrate/migrate
    volumes:
        - .:/migrations
    command: ["-database", "postgres://mydbuser:mydbpwd@localhost:5432/mydbname?sslmode=disable", "-path", "/migrations", "up"]
    links: 
        - db

  adminer:
    image: adminer
    restart: always
    ports:
      - "8081:8080"
    depends_on:
      - db

1 Ответ

1 голос
/ 04 мая 2020

Вам не нужно создавать ссылки, docker - создавать создать сеть по умолчанию. также связь между сервисами должна использовать имя сервиса, localhost означает, что этот контейнер (мигрировать) не DB контейнер.

изменить localhost на db

  migrate:
    image: migrate/migrate
    volumes:
        - .:/migrations
    command: ["-database", "postgres://mydbuser:mybpwd@db:5432/mydbname?sslmode=disable", "-path", "/migrations", "up"]

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

...