在容器运行时更新 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 容器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)
调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)