Docker в Docker при непрерывной интеграции приводит к тому, что «на устройстве не осталось места» - PullRequest
1 голос
/ 17 октября 2019

В моем текущем проекте мы используем Jenkins с подходом, основанным на Docker-In-Docker, для создания образов Docker.

Я расширил одну из наших работ, чтобы использовать интеграционные тесты с использованием docker-compose и инструмента тестирования Landoops Commandline coyote,Я создаю образ рабочего докера в сборке, а также образы докеров, используемые только для интеграционного тестирования.

Через некоторое время пространство докера в (я думаю / var / lib / docker) заполняет весь диск иЯ получаю что-то вроде этого:

mkdir /var/lib/docker/volumes/41d787304856fb065aa0d6342efe0a0c38672775fc044a3345ae5067ec8b8f3c: no space left on device

Когда я выполняю очистку докерной системы вместе с очисткой томов, сборка / тестирование запускается снова, но приходится загружать много образов докера снова, и этого не должно бытьсделано в то время как другой тест находится в середине загрузки / сборки образов докера.

Итак, мой вывод: Docker-In-Docker (особенно локальное хранилище образов и томов) использует «внешний» реестр и том докера. хранилище.

Мой вопрос: есть ли какое-то решение этой проблемы без удаления всех изображений / томов после / перед каждым заданием?

Обновление :

Я обнаружил это

"Устройство сопоставления устройств не является пространством имен, поэтому, если несколько экземпляров Docker используют его на одном компьютере,все они смогут видеть (и влиять) на изображения друг друга и устройства поддержки контейнера. Нет bueno. Есть обходные пути для многих из этих проблем, например, если вы хотите использовать AUFS во внутреннем Docker, просто продвигайте / var /lib / docker будет томом, и у вас все будет хорошо. Docker добавил несколько базовых пространств имен к именам целевых устройств Device Mapper, чтобы при нескольких вызовах Docker на одной и той же машине они не наступали друг на друга. "

from: https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

Поэтому мне кажется, что наша команда OPS просто смонтировала его, не используя пространства имен devicemapper, поэтому каждое задание на одном узле использует один и тот же /var/lib/docker.*1025. *

...