Dockerized приложение генерирует ошибку тайм-аута операции чтения и завершает работу
У меня есть экспресс- приложение, которое получает данные из push-очереди IronMQ. Я Dockerized это приложение и при запуске приложения в контейнере Docker, после некоторого простоя, скажем, 20-30 минут, приложение выдает ошибку и завершает работу:
Error: read tcp 192.168.59.3:50346->192.168.59.103:2376: read: operation timed out
Мой boot2docker ip -> 192.168.59.103
Я переправил порт на 3000.
Я пытался использовать объект процесса, чтобы поймать необработанное исключение, но безрезультатно.
Примечание: я запустил приложение за пределами Docker на своем локальном компьютере, и приложение работает нормально, не выдавая ошибку и не выходя из системы. Так что проблема, похоже, с докером.
1 ответ
Оказывается, когда вы выполняете команду запуска docker в подключенном режиме, то есть с параметром -a или без параметра -d, что-то вроде:
docker run -a <imageID>
или же docker run <imageID>
Docker отсоединяется от контейнера по умолчанию через некоторое время и запускает контейнер в отдельном режиме. Это означает, что ваше приложение работает в фоновом режиме.
Отсюда ошибка: истекло время ожидания
Примечание. Это явно не упоминается в докерской документации, поэтому можно подумать, что это может быть задокументировано здесь для дальнейшего использования.