Не удается получить соединение между контейнерами - PullRequest
0 голосов
/ 12 декабря 2018

обновление разрешения

Проблема была в опечатке в файле docker_compose.У меня был контейнер postgres, помеченный как postgre.Это решило проблему поиска в сети.Пожалуйста, посоветуйте, если мне следует удалить это сообщение.

Я включил код здесь .. https://github.com/vinceyoumans/achal

ПРОБЛЕМА: Два контейнера в файле составления докера.один стандартный контейнер Postgress.Второй - контейнер GoLang Scratch.Файл GoLang main.go паникует при сбое соединения postgres.Вы можете увидеть код на GitHub.

Ошибка:

dial tcp: поиск postgres на 127.0.0.11:53: такого хоста нет

ЗАПРОС: просмотр основного.иди и создай файл docker, чтобы увидеть, что не так с этой сетью ... чего мне не хватает.

main.go

db, err := gorm.Open("postgres", "host='postgres' port=5432 user=docker dbname='docker' password='password'")

if err != nil {
    fmt.Println("============   exiting ==========")
    fmt.Println(err)
    panic("failed to connect database e")
    //  the error i get... dial tcp: lookup postgres on 127.0.0.11:53: no such host
    // panic("failed to connect database: " + err)
}

Docker-compose.yml

version: '3.6'
services:
  postgre:
    image: postgres:11.1-alpine
    ports:
      - '5432:5432'
    #network_mode: bridge
    #container_name: postgres

    environment:
      POSTGRES_USER: 'user'
      POSTGRES_PASSWORD: 'password'
      POSTGRESS_DB: 'db_amex01'
    volumes:
      - ./init:/docker-entrypoint-initdb.d/

  todo:
    build: ./go_amex/
    # ports:
    #   - "8000:8080"

# sudo docker-compose -f docker-compose.yml up

#  HELP:  how would I add the goLang service from this point?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

У вас есть опечатка в вашем файле.Псевдоним DNS автоматически настраивается для имени службы, и для вашего проекта также создается сеть докеров по умолчанию.Поэтому все, что нужно, - это подключиться к имени службы, которое в вашем случае было «postgre» вместо «postgres».Чтобы исправить это, попробуйте этот файл compose:

version: '3.6'
services:
  postgres:
    image: postgres:11.1-alpine
    ports:
      - '5432:5432'
    environment:
      POSTGRES_USER: 'user'
      POSTGRES_PASSWORD: 'password'
      POSTGRESS_DB: 'db_amex01'
    volumes:
      - ./init:/docker-entrypoint-initdb.d/

  todo:
    build: ./go_amex/
    # ports:
    #   - "8000:8080"

Подробнее о создании файлов сети см.: https://docs.docker.com/compose/networking/

Обратите внимание, что следующая ошибка, которую вы, скорее всего, увидите, - отказ в соединении,Compose запустит оба контейнера одновременно, и ваше приложение, скорее всего, будет запущено до завершения запуска базы данных.Чтобы решить эту проблему, вам понадобится повторный цикл с небольшой задержкой между повторными попытками, а также тайм-аут или предел повторных попыток в коде приложения.

0 голосов
/ 13 декабря 2018

Проблема была в опечатке в файле docker_compose.У меня был контейнер postgres, помеченный как postgre.Это решило проблему поиска в сети.Пожалуйста, посоветуйте, если мне следует удалить это сообщение.

0 голосов
/ 12 декабря 2018

Вам не хватает сетевой конфигурации.Это необходимо, если вы хотите установить связь между контейнерами.

version: '3.6'
services:
  postgres: # you were missing the 's'
    image: postgres:11.1-alpine
    ports:
      - '5432:5432'
    networks:
      - mynet

    environment:
      POSTGRES_USER: 'user'
      POSTGRES_PASSWORD: 'password'
      POSTGRESS_DB: 'db_amex01'
    volumes:
      - ./init:/docker-entrypoint-initdb.d/

  todo:
    build: ./go_amex/
    ports:
      - "8000:8000" # I looked at your main.go file, it's port 8000!
    networks:
      - mynet

networks:
  mynet:
    driver: bridge

Теперь вы можете видеть (с помощью dns-разрешения) каждую службу из контейнеров, используя имя службы в качестве имени хоста.

...