Тайм-аут соединения с БД в докере - PullRequest
0 голосов
/ 11 января 2019

Окружающая среда

  • Среда: Mac и Docker
  • Язык: GoLang
  • База данных: Postgresql

Ожидаемое поведение

У нас есть пул соединений, используемый для подключения к базе данных. Время подключения к базе данных может варьироваться от 1 минуты до 20 минут в зависимости от вызываемых функций.

Фактическое поведение

  • Запуск по локальной сети: все хорошо.
  • Запуск в Docker: подключение к БД менее 5 минут в порядке. Для соединения с БД, которое дольше 5 минут, каждые 5-6 минут соединение разрывается в докере, и новое соединение инициируется автоматически. После 3 переподключений возвращается следующая ошибка и процесс прекращается

    драйвер: плохое соединение

Некоторые попытки

  • попытаться пропинговать базу данных во время вызова функции, чтобы сохранить соединение жив - не работает (работает в некоторых простых случаях, но не в сложный случай и не стабильный.
  • попытаться пропинговать базу данных во время вызова функции с тем же соединением, используя db.SetMaxOpenConns (1) и db.SetMaxIdleConns (1) - не работает.
  • попробуйте увеличить время жизни соединения с помощью db.SetConnMaxLifetime () - не работает.

Некоторая информация

После некоторого поиска возможная причина заключается в том, что докер периодически проверяет соединения и устанавливает тайм-аут их, если соединение активно в течение 300 секунд и ответ не возвращается. Не найдете способа перезаписать эту конфигурацию.

https://github.com/moby/moby/issues/36053

https://github.com/docker/for-mac/issues/2442

Как я могу обойти эту проблему? Благодарим Вас за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...