gpt4 book ai didi

postgresql - docker stop && docker rm 并没有真正摆脱我的容器

转载 作者:行者123 更新时间:2023-11-29 12:44:38 26 4
gpt4 key购买 nike

我在使用 postgres 时有一些奇怪的行为图片。

我创建了一个脚本,它被挂载到 /docker-entrypoint-initdb.d 并使用单用户模式来初始化数据库。

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

docker stop postgres_db
docker rm postgres_db

然后启动一个新容器,数据库是旧的。它不会改变。

我正在使用 vagrant box-cutter/ubuntu1404-docker 并且当我运行时

vagrant destroy -f
vagrant up

然后重新创建新的 docker 容器,应用更改。

为什么当我只是删除旧容器并启动一个新容器时它不起作用? docker 在哪里保存它的缓存,我可以清除它以真正获得新图像?

更新:

我使用的确切 docker 文件是对原始文件的一个小扩展。它只安装 orafce 插件 link , 内容:

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 文件夹包含一个创建新数据库和新用户的脚本。

说明:

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

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

但是当我销毁 VM 并再次启动它时,我拥有之前定义的配置。然而,再次更改它们需要我销毁并重新启动 VM,这比销毁一个 docker 容器并启动一个新容器花费的时间要长得多。

最佳答案

你得到一个新的容器,但是-v/data:/var/lib/postgresql/data 将主机的/data 目录挂载到容器中,使得容器之间对数据库的更改持久化。如果省略,数据库将隔离在容器中,并在您删除容器后立即消失。

参见 Managing data in containers (Docker documentation)了解详情。

关于postgresql - docker stop && docker rm 并没有真正摆脱我的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31135136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com