Dockerfile не может удалить устройство или ресурс занят - PullRequest
1 голос
/ 07 января 2020

Я пытаюсь сделать:

FROM mysql:5.7

RUN rm -rf /var/lib/mysql

COPY ./db /var/lib/mysql

И я получаю ошибку:

rm: не могу удалить '/ var / lib / mysql': устройство или ресурс занят

Мне не нужно rm папка, я просто хочу перезаписать, но по какой-то причине dockerfile не перезаписывает, просто кажется, что инструкция COPY тихо завершается с ошибкой.

Не уверен, что происходит кэширование или что-то еще, но я использую --no-cache (это не первый раз, когда я строил образ, но файлы изменились).

Как Я могу отладить?

1 Ответ

3 голосов
/ 07 января 2020

mysql Dockerfile объявляет

VOLUME /var/lib/mysql

Это напрямую приводит к ошибке, которую вы видите. (На низком уровне Docker вызывает монтирование тома в этот каталог, как в обычной команде / функции Linux mount, поэтому вы не можете удалить точку монтирования.)

It также имеет следствие, что производные изображения не могут вносить никаких изменений в это дерево каталогов, поэтому ваш фундаментальный подход здесь не сработает. Если у вас уже есть дерево данных, которое может работать здесь, вы можете использовать опцию docker run -v, чтобы смонтировать его в контейнер

docker run -v $PWD/db:/var/lib/mysql mysql:5.7

Если у вас просто есть файл дампа, вы можете смонтировать или скопировать его в /docker-entrypoint-initdb.d; этот механизм описан на странице Docker Hub mysql image (в разделе «Инициализация экземпляра fre sh»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...