在容器运行时更​​新 docker 容器 [重复]

Posted

技术标签:

【中文标题】在容器运行时更​​新 docker 容器 [重复]【英文标题】:Updating docker container while container is running [duplicate] 【发布时间】:2022-01-21 22:15:12 【问题描述】:

我是 Docker 新手,我有一个问题。

我有一个 docker 容器,包括我的 ASP.NET Core API 项目。

我想更改这个项目中的一些文件,然后更新它。

但我不想干扰或阻止我的项目运行。

有可能吗?

如果是,我该怎么做?

【问题讨论】:

更好的做法是构建一个新映像,部署它并转移流量。根据您如何部署它,它可能更容易或困难。例如,Kubernetes 具有用于特定目的的服务等抽象。 【参考方案1】:

您可以使用docker exec -it <container name> /bin/bash 在容器中获取 bash shell。然后你可以运行每个命令来修改项目。根据容器的图像,bin/bash 可能会更改以获取终端。

【讨论】:

如果容器因某种原因重启会怎样? 如果你的意思是:“如果容器重新启动,我的修改会发生什么”,那么这取决于发生了什么。如果您修改了按卷挂载的文件夹。您的更改可以保存。但如果不是,您的更改将会丢失。因为如果它由于某种未知原因重新启动,您将无法将容器提交到映像(容器重新启动后仍然有更改的第二个选项)。【参考方案2】:

容器根据定义是短暂的,我建议你修改你的项目并构建它并启动一个新容器,当它运行时停止旧容器。 我认为您也可以使用以下方法进入容器:

docker exec -it id_container bash

然后您可以使用 bash 修改您要修改的文件,获取您可以键入的容器 id:

docker ps

您可以在CONTAINER ID部分下找到它

【讨论】:

【参考方案3】:

我认为您有两种方法可以做到这一点。一种是get inside the container,另一种是创建volume(并挂载它),这将允许您在本地进行更改,并且相同的更改将立即反映在容器中。

这个link 也可能有帮助 - 它是关于 Docker 中的存储。

这些命令并不总是以这种方式工作,它总是取决于你的容器,但这里有一些例子:

    进入容器

docker exec -it container ID or container name bash

你可以通过docker ps知道你的容器ID和容器名称

    使用卷创建容器

docker run -d --name my_container -v /project_core_api:/core_api my_image:tag

左侧/project_core_api 在您的机器中,右侧core_api 将是容器内的文件夹,它将反映您在/project_core_api 中的所有更改。

【讨论】:

以上是关于在容器运行时更​​新 docker 容器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Docker:将正在运行的容器公开给主机[重复]

如何进入已经使用新 TTY 运行的 Docker 容器

调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)

调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)

将文件从本地文件系统添加到正在运行的 Docker 容器 [重复]

如何使用 docker-compose 在 docker 容器之间建立依赖关系 [重复]