Вы можете превратить эту функцию в автономный скрипт оболочки. (В значительной степени, просто удалив оболочку function
и убрав часть docker exec
вызова инструмента.) Как только вы это сделаете, вы можете COPY
сценарий оболочки в своем изображении, и как только вы Сделав это, вы можете RUN
это.
...
COPY pylint-enforcer.sh .
RUN chmod +x ./pylint-enforcer.sh \
&& ./pylint-enforcer.sh
...
Похоже, что pylint выдаст ненулевой код выхода, если он выдаст какие-либо сообщения . Для целей Dockerfile может быть достаточно просто RUN pylint -r -n .
; если он печатает что-либо, похоже, что он вернет ненулевой код завершения, который docker build
будет интерпретироваться как «сбой» и не будет продолжен.
Вы можете подумать, захотите ли вы когда-нибудь возможность создавать и распространять образ кода, который не является абсолютно совершенным (возможно, во время события простоя), и хотите ли вы требовать разрешения на уровне root для запустить простые инструменты проверки правильности кода (если вы можете docker
все, что угодно, вы можете редактировать произвольные файлы на хосте как root). Я бы предложил запускать эти инструменты из виртуальной среды, отличной от Docker, во время процесса CI, и не помещать их в свой Dockerfile и не полагаться на docker exec
для их запуска.