🛠️ Контейнер работает на ноутбуке, но падает на сервере. Ошибка недели — считать, что фразы «у меня локально работает» достаточно для проверки.
Docker действительно помогает сделать окружение более предсказуемым. Но контейнер не живёт в вакууме. На сервере могут отличаться переменные окружения, монтирования, права на файлы, сеть, DNS, версия образа, порядок запуска сервисов и ограничения по ресурсам.
Что проверить до вывода «проблема в сервере»:
• Образ Точно ли на сервере запускается тот же образ: имя, tag, а при строгой проверке — тот же digest? Или локально используется свежая сборка, а на сервер уехала старая? • Переменные окружения Все ли обязательные переменные реально попали в контейнер? Не были ли они переопределены через Compose, .env, env_file или параметры запуска? • Тома и bind mounts Есть ли нужные пути на хосте, если используется bind mount? Совпадают ли пути? Не скрывает ли монтирование файлы, которые были внутри образа? Может ли процесс читать и записывать туда, куда должен? • Права пользователя Под каким пользователем работает процесс в контейнере? Не оказалось ли, что локально всё запускалось с одними правами, а на сервере доступ к файлам ограничен? • Сеть и порты Внутри сети Compose доступны ли соседние сервисы по именам сервисов и container port? Не перепутаны ли host port и container port? Не отличается ли схема сети от локального compose? • Порядок запуска Не стартует ли приложение раньше, чем база, брокер сообщений или другой зависимый сервис действительно готовы принимать соединения? Один порядок запуска не всегда означает готовность зависимости — иногда нужен healthcheck. • Логи Что именно пишет приложение при падении: нет переменной, нет доступа к файлу, не открывается соединение, не найден host, завершился процесс?
Типичная ошибка — проверять только сам факт запуска контейнера. В рабочей среде важнее проверить весь сценарий: конфигурацию, зависимости, сеть, данные и права.
Практический вывод: «работает локально» — это начало проверки, а не её завершение.
На обучении по Docker и DevOps такие сценарии удобно разбирать на практике: Dockerfile, образы, Compose, переменные окружения, сети, volume, права доступа и диагностику падений контейнеров.
🔹🔹🔹🔹