我正在使用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),但是当我重新运行以上命令时,数据库架构和数据与我停下的位置相同,而不是空的数据库。
如果需要返回到空数据库,是否可以重新初始化容器?

最佳答案

通常情况下,您将用两个rm -rf挂载的主机目录中的所有文件清空-在您的情况下

rm -rf ~/* # deletes all non-hidden files and directories
rm -rf ~/.* # deletes all hidden files and directories
但是,由于您将 HOME 目录作为卷安装(无论拥有什么功能?),这些命令将破坏您的用户帐户,因此您需要手动查找和删除由数据库容器创建的所有文件。
完成后,请创建一个空目录并将其用作绑定(bind)安装:
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
首先要取决于您使用上述哪种方法存储数据。

关于docker - 如何重新初始化Docker容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63767908/

10-11 05:03
查看更多