docker停止&&docker公司并没有真正摆脱我的容器

使用postgres图像时,我有一些奇怪的行为。

我创build了一个安装在/docker-entrypoint-initdb.d的脚本,并使用单用户模式初始化数据库。

但是,当我更新脚本,运行

 docker stop postgres_db docker rm postgres_db 

而不是开始一个新的容器,数据库是旧的。 它不会改变。

我使用stream浪的box-cutter/ubuntu1404-docker ,当我运行

 vagrant destroy -f vagrant up 

并重新创build新的docker集装箱,将应用更改。

当我刚刚删除旧的容器,并开始一个新的容器,为什么不工作? docker在哪里保持它的caching,我可以清除,真正得到一个新的形象?

更新:

我正在使用的确切docker文件是原来的一个小的扩展。 它只是安装orafce插件的链接 ,内容:

 FROM postgres:9.4 RUN apt-get update && \ apt-get install -y postgresql-9.4-orafce && \ rm -rf /var/lib/apt/lists/* 

我用来启动一个新的容器的命令是:

 docker run --name="postgres_db" \ --restart="always" \ -e POSTGRES_PASSWORD=PostgresPassword \ -p 5432:5432 \ -v /data:/var/lib/postgresql/data \ -v /vagrant/container_data/init_scripts:/docker-entrypoint-initdb.d \ -v /vagrant/container_data/tmp:/tmp \ -d grmanit/postgres 

init_scripts文件夹包含一个创build新数据库和新用户的脚本。

澄清:

当我在我的init_scripts文件夹中更改脚本时,例如修改数据库名称,而不是停止+删除旧容器并启动一个新的,它没有任何作用。

当我更改在docker run命令(在本例中为PostgresPassword )中设置为环境variables的postgres的密码时,再次停止+删除旧的容器,并使用新的环境variables启动一个新的容器,没有任何效果。 我仍然需要使用旧的密码连接到数据库,新的不会工作。

但是当我摧毁虚拟机并重新启动时,我拥有之前定义的configuration。 然而,改变他们需要我摧毁和重新启动虚拟机,这需要比摧毁一个docker集装箱和启动一个新的更长的时间。

你得到一个新的容器,但-v /data:/var/lib/postgresql/data将主机的/data目录挂载到容器中,对容器之间的数据库进行更改。 如果你省略了,数据库将被隔离在容器中,一旦你删除容器就会消失。

有关详细信息,请参阅pipe理容器中的数据(Docker文档) 。