dockerfile 无法删除设备或资源繁忙

use*_*234 8 docker

我正在尝试做:

FROM mysql:5.7

RUN rm -rf /var/lib/mysql

COPY ./db /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

我收到错误:

rm:无法删除“/var/lib/mysql”:设备或资源繁忙

我真的不需要rm该文件夹,我只是想覆盖,但由于某种原因 dockerfile 没有覆盖,指令COPY似乎只是默默地失败了。

不确定是否正在进行缓存或其他操作,但我使用--no-cache,(这不是我第一次构建图像​​,但文件已更改)。

我该如何调试?

Dav*_*aze 6

Dockerfile声明mysql

VOLUME /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

这直接导致您看到的错误。(在低级别上,Docker 会导致卷挂载到该目录上,就像在正常的 Linuxmount命令/函数中一样,因此您无法删除挂载点。)

它还会导致派生图像无法在该目录树中进行任何更改,因此您此处的基本方法将不起作用。如果您已经有一个可以在此处工作的数据树,则可以使用该docker run -v选项将其安装到容器中

docker run -v $PWD/db:/var/lib/mysql mysql:5.7
Run Code Online (Sandbox Code Playgroud)

如果您只有一个转储文件,您可以将其挂载或复制到/docker-entrypoint-initdb.dDocker Hubmysql镜像页面(在“初始化新实例”下)描述了此机制。