在使用波斯特格斯图像时,我有一些奇怪的行为。
我已经创建了一个脚本,它被挂载到/docker-entrypoint-initdb.d中,并使用单用户模式初始化数据库。
但是,当我更新脚本时,请运行
docker stop postgres_db
docker rm postgres_db而不是启动一个新的容器,数据库是旧的。不会改变的。
我用的是流浪汉box-cutter/ubuntu1404-docker当我跑
vagrant destroy -f
vagrant up并应用更改,而不是重新创建新的码头容器。
当我移除旧容器并启动一个新容器时,它为什么不起作用?码头在哪里保存它的缓存,我可以清除,以真正得到一个新的形象?
更新:
我使用的确切的停靠文件是原始文件的一个小扩展名。它只安装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/postgresinit_scripts文件夹包含一个脚本,它创建一个新数据库和一个新用户。
Clarifications:
例如,当我更改我的init_scripts文件夹中的脚本时,修改数据库名,而不是stop+remove旧容器并启动一个新容器,它没有任何效果。
当我更改postgres的密码(在docker run命令中设置为环境变量(在本例中是PostgresPassword)并再次更改旧容器,而不是使用新的环境变量启动新容器时,它同样没有任何效果。我仍然需要使用旧密码才能连接到db,而新的密码将无法工作。
但是当我销毁VM并重新启动它时,我有我以前定义过的配置。然而,再次更改它们需要我销毁并重新启动VM,这比仅仅销毁一个码头容器和启动一个新的容器花费的时间要长得多。
发布于 2015-06-30 10:12:01
您将获得一个新的容器,但是-v /data:/var/lib/postgresql/data将主机的/data目录挂载到容器中,在容器之间对数据库进行持久的更改。如果省略,数据库将在容器中被隔离,并在删除容器后立即消失。
详情请参见管理集装箱中的数据(码头文档)。
https://stackoverflow.com/questions/31135136
复制相似问题