Вы не можете, и это плохая идея. Например, если вы запустите:
docker-compose build
docker-compose down -v
docker-compose up
Шаг down
удалит все контейнеры и их базовое хранилище (включая содержимое базы данных); затем шаг up
создаст все новые контейнеры из существующих образов без повторного запуска Dockerfile. Даже если вы добавили параметр --build
, кэширование слоев Docker приведет к заключению, что выходные данные файловой системы вашей команды настройки базы данных не изменились, и пропустит повторный запуск этого шага.
Вы можете столкнетесь с аналогичной проблемой, если вы docker push
построите образ в некоторый реестр и запустите его на другом хосте: поскольку образ можно использовать повторно, команды из его файла Docker не будут запускаться повторно, но это не та же база данных, поэтому настройка не будет завершена.
В зависимости от того, какую настройку вы пытаетесь выполнить, вероятно, лучший подход - настроить изображение с помощью сценария точки входа, который запускает миграции базы данных вашего приложения, а затем exec "$@"
запускает главную команду контейнера. Также можно поместить команды установки в каталог /docker-entrypoint-initdb.d
базы данных, хотя они не будут запускаться повторно, если схема базы данных вашего приложения изменится.
На техническом уровне это не работает, потому что Среда docker build
не входит в какую-либо конкретную сеть Docker, ни mynetwork
, который вы указываете вручную, ни default
сеть, которую Compose создает самостоятельно. Последовательность сборки запускается отдельно от запуска результирующего образа и игнорирует большинство настроек Docker Compose.