gpt4 book ai didi

Docker:更改已创建容器上的端口绑定(bind)而不会丢失数据

转载 作者:行者123 更新时间:2023-12-02 17:52:22 26 4
gpt4 key购买 nike

假设我有一个 MongoDbSql Server带有很多数据的容器,突然间(这很可能)我需要更改端口!可能是因为突然的安全问题!我需要停止容器并重新启动它在不同的端口上运行。为什么 docker 不允许我这样做,如果我再次运行镜像,将创建一个内部没有数据的新容器,这会导致很多困惑。

有合适的内置解决方案吗?我的意思是一种不需要我备份数据库、将它们移出容器卷并再次恢复它们的解决方案。一些合乎逻辑的东西,例如 命令 这可以让我更改转发的端口,例如 -p 1433:1234 to 27017:1234 .

最佳答案

BLUF:使用映射的卷启动 MongoDB 容器,以使用以下格式保持数据持久性:docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo
虽然我同意,但如果 Docker 能够在正在运行的容器中切换端口号,那就太好了。正如其他人所说,每个容器都是一个进程,我不知道如何更改正在运行的进程上的端口。

如果您已正确设置卷,则无需导入数据。我一直为 MySQL 数据库这样做。如果您正确映射卷,MyQSL 镜像只是与数据库分离的数据库引擎。这就是 Docker 的设计方式。

在查看“存储数据的位置”部分时,它给出了一个将卷安装到主机上的文件夹以保存数据的示例。这应该允许您使用相同的数据启动一个新容器,而无需重新导入。但我对 NoSQL 的 MongoDB 不太熟悉。

https://hub.docker.com/_/mongo/# !

您可能需要使用以下转储命令备份数据库:
docker exec some-mongo sh -c 'exec mongodump -d <database_name> --archive' > /some/path/on/your/host/all-collections.archive
使用映射的卷启动一个新容器并恢复数据。
docker run --name some-mongo -v /my/own/datadir:/data/db -v /some/path/on/your/host/all-collections.archive:/data/db/collections.archive -d mongo
您需要恢复该备份。
docker exec some-mongo sh -c 'exec mongorestore --db <database_name> --archive=/data/db/collections.archive
从那时起,您应该能够简单地停止并启动一个映射了卷的新容器。您的数据应该保持持久性。您应该不再需要转储和恢复(嗯,显然是出于正常备份目的)。

关于Docker:更改已创建容器上的端口绑定(bind)而不会丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698129/

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