Я не знаю подробностей используемых вами инструментов отдельного компилятора, но я думаю, что получаю то, чего вы пытаетесь достичь:
Я бы не включил команду COPY в Dockerfile.Dockerfile должен содержать только необходимые инструкции, чтобы иметь изображение с необходимыми инструментами и зависимостями для выполнения процесса компиляции, и, возможно, сценарий оболочки с конкретными порядками компиляции.
Теперь вы запускаете docker build
и выесть ваше изображение, давайте назовем его mosq
.Предположим, что:
- Ваш исходный код находится на вашем локальном компьютере в
/home/me/my-source-code
- После выполнения вы получаете результат в подпапке
dist
этой папки: /home/me/my-source-code/dist/result.so
- Ваше изображение имеет скрипт
/compile.sh
, который компилирует исходный код, присутствующий в /compilation
(эта папка должна быть пустой на изображении)
Затем вы запускаетеобраз смонтированного тома параметр: /home/me/my-source-code
на /compilation
внутри контейнера
При условии, что все предыдущие точки, команда docker run
должна выглядеть примерно так:
docker run -d --name my-compiler -v /home/me/my-source-code:/source mosq /compile.sh
И так, контейнер будет работать молча и умрет, и после этого у вас будет ваша компиляция в /home/me/my-source-code/dist/result.so
Особенности могут сильно различаться в зависимости от деталей, но я надеюсь, что вы получитеИдея: подготовить все в вашем изображении так, чтобы при выполнении одного скрипта sh компилятор брал откуда-то код и запускался.Смонтируйте том с кодом в этой папке.Если компилятор выводит результат где-то еще, подключите другой том с хост-машины, чтобы получить результат там.