Окружающая среда
- Среда: 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
Как я могу обойти эту проблему? Благодарим Вас за помощь.