我正在使用Docker运行Db2的本地实例,并将~/
作为/database
挂载到容器中以创建和存储数据库(apidemo
)。该命令在下面。即使容器停止并重新启动,它仍能按预期工作,并且数据库和数据仍然存在。
docker run -itd --name db2_container_inst -e DBNAME=apidemo -v ~/:/database -e DB2INST1_PASSWORD=mY%tEst%pAsSwOrD -e LICENSE=accept -p 50000:50000 --privileged=true ibmcom/db2
我的问题是,有时我需要一个干净且空的数据库,但是,我似乎无法重新初始化docker run
。我曾尝试使用Docker Desktop删除容器实例(db2_container_inst
),但是当我重新运行上面的命令时,数据库模式和数据与我停下的位置相同,而不是空的数据库。 / p>
是否有一种方法可以重新初始化容器,我需要返回到空数据库吗?
答案 0 :(得分:3)
在通常情况下,您会清空用两个rm -rf
挂载的主机目录中的所有文件-在您的情况下
rm -rf ~/* # deletes all non-hidden files and directories
rm -rf ~/.* # deletes all hidden files and directories
但是,由于您将 HOME 目录安装为卷(无论如何拥有该权限?),这些命令将破坏您的用户帐户,因此您需要手动查找并删除数据库容器创建的所有文件。
完成后,请创建一个空目录并将其用作绑定安装:
mkdir ~/db_data
docker run -itd --name db2_container_inst -e DBNAME=apidemo -v ~/db_data:/database -e DB2INST1_PASSWORD=mY%tEst%pAsSwOrD -e LICENSE=accept -p 50000:50000 --privileged=true ibmcom/db2
或者更好地使用命名卷
docker volume create db_data
docker run -itd --name db2_container_inst -e DBNAME=apidemo -v db_data:/database -e DB2INST1_PASSWORD=mY%tEst%pAsSwOrD -e LICENSE=accept -p 50000:50000 --privileged=true ibmcom/db2
然后,如果您需要清理数据库,则可以删除容器,然后运行
rm -rf ~/db_data/*
rm -rf ~/db_data/.*
或
docker volume rm db_data
首先要使用上面哪种方法存储数据。