如何重新初始化Docker容器

时间:2020-09-06 19:06:02

标签: docker db2

我正在使用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>

是否有一种方法可以重新初始化容器,我需要返回到空数据库吗?

1 个答案:

答案 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 

首先要使用上面哪种方法存储数据。