Постоянные перезапуски Docker-контейнера чаще всего происходят из-за того, что основной процесс внутри контейнера завершает свою работу с ошибкой или завершается по какой-либо причине. Вот несколько возможных причин, по которым ваше Go-приложение может вызывать постоянные перезапуски:
1. **Ошибка в приложении**: Если ваше Go-приложение завершает работу с ошибкой (например, паника или не обработанная ошибка), контейнер будет завершен, и Docker попытается его перезапустить. Пожалуйста, убедитесь, что ваше приложение работает корректно и обрабатывает ошибки.
2. **Неверное значение переменной среды**: Вы используете переменную среды `SERVER_PORT`. Убедитесь, что приложение правильно читает эту переменную и использует ее для своей работы. Если по какой-то причине приложение не находит или не может использовать этот порт, оно может завершиться.
3. **Проблемы с зависимостями**: Проверьте код вашего приложения на наличие ошибок, зависимостей или некорректной настройки. Возможно, в процессе инициализации оно пытается получить доступ к ресурсам, которые недоступны, что приводит к завершению приложения.
4. **Несоответствие портов**: Убедитесь, что порт, на котором слушает ваше приложение, соответствует порту, указному в разделе `ports` вашего `docker-compose.yml`. Например, если ваше приложение слушает на порту 8080 (что вы указали), убедитесь, что код действительно настраивает сервер на этот порт.
5. **Логи**: Проверьте логи контейнера для получения более детальной информации о причине завершения работы приложения. Вы можете сделать это с помощью команды:
```bash
docker logs ms_payments
```
Это может дать подсказки о том, что именно идет не так.
6. **Условие выхода**: Убедитесь, что ваш программный код не выходит с ненулевым статусом. Docker рассматривает любую ненулевую завершение как ошибку и перезапускает контейнер.
Если после проверки всех вышеуказанных пунктов проблема все еще сохраняется, возможно, вам следует предоставить больше информации о логах контейнера или коде вашего Go-приложения для дальнейшей диагностики.