Docker:在不丢失数据的情况下更改已创建容器上的端口绑定

Arr*_*rrr 7 docker

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

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

J R*_*don 4

BLUF:使用映射的卷启动 MongoDB 容器,以使用以下格式保持数据持久性:docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo

虽然我同意,但如果 Docker 能够在正在运行的容器中切换端口号,那就太好了。正如其他人所说,每个容器都是一个进程,我不知道如何更改正在运行的进程上的端口。

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

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

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

从那时起,您应该能够简单地停止并启动一个包含映射的卷的新容器。您的数据应该保持持久性。您不应该再需要转储和恢复(显然是为了正常备份目的)。