Во- первых, есть проблема в вашем Dockerfile:
RUN service mysql restart && /tmp/setup.sh
Образы Docker не сохраняют запущенные процессы. Следовательно, ваша RUNкоманда выполняется только во время docker buildфазы и останавливается после завершения сборки. Вместо этого вам нужно указать команду при запуске контейнера с помощью команд CMDили, ENTRYPOINTкак показано ниже:
CMD mysql start
Во-вторых, контейнеру Docker необходим процесс (последняя команда) для продолжения работы, иначе контейнер выйдет / остановится. Следовательно, обычную service mysql startкоманду нельзя использовать непосредственно в Dockerfile.
Решение
Существует три типичных способа поддержания процесса в рабочем состоянии:
Использование serviceкоманды и добавить не конец команды после этого, какtail -F
CMD service mysql start && tail -F /var/log/mysql/error.log
Это часто предпочтительнее, когда у вас запущена одна служба, поскольку она делает выводимый журнал доступным для докера.
Это работает, только если есть сценарий, как mysqld_safe.
Это лучше всего, если команда должна выполнить серию шагов, опять же, /start.shдолжна продолжаться.
Заметка
Для начинающих использовать supervisordне рекомендуется. Честно говоря, это излишне. Гораздо лучше использовать одну команду service / single для контейнера.
Кстати: пожалуйста, проверьте https://registry.hub.docker.com для существующих изображений MySQL Docker для справки