У меня была такая же проблема, и я решил ее хакерским способом ...
В моем случае веб-сервисом является Haskell, который строит с помощью команды stack build
, а затем выполняет с stack exec APP_NAME
.Есть также сокращение, например stack build --exec APP_NAME
.
. Также есть возможность создавать только зависимости с stack build --only-dependencies
, поэтому сборка Docker их кэширует.
Поэтому я изменил свой Dockerfile следующим образом:
COPY ./package.yaml /app/package.yaml # Copying the package file
RUN stack build --only-dependencies # Build dependencies only
COPY . /app # Copying the rest of the files
EXPOSE 3000
CMD ["stack", "build", "--exec", "APP_NAME"] # Build the application itself
, поэтому окончательная сборка запускается только при запуске службы.
Я не знаю достаточно Java, но я думаю, что там тоже должна быть похожая опция.
Также необходим некоторый взлом для части depen_on: https://docs.docker.com/compose/startup-order/