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文档) 。