如何在没有 Docker Compose 的情况下重新创建 Docker 容器

How to Recreate a Docker Container Without Docker Compose

TLDR:当使用 docker compose 时,我可以通过更改其配置 重新创建 容器 and/or 图片与 docker-compose.yml 文件以及 运行ning docker-compose up。是否有任何通用的等价物用于重新创建由 docker create/run 命令创建的容器(以应用更改)?


详细说明一下:

associated docker compose documentation 状态:

If there are existing containers for a service, and the service’s configuration or image was changed after the container’s creation, docker-compose up picks up the changes by stopping and recreating the containers (preserving mounted volumes).

我很难理解在此 娱乐 期间实际执行了哪些底层步骤,例如docker(没有撰写)文档似乎根本没有使用 recreate 术语。

简单地 运行 docker container rm xy 然后 docker container create/run (连同传递完整和修改的配置)是否安全?还是 docker compose 实际上在幕后做了更多事情?

我已经找到了有关应用特定配置更改的答案,例如this one about port mappings,但我仍然想知道是否有更笼统的答案。

I'm having troubles to understand which underlaying steps are actually performed during this recreation, as e.g. the docker (without compose) documentation doesn't really seem to use the recreate term at all.

docker-compose 是高级工具;它在单个操作中执行需要使用 docker cli 的多个命令的操作。当 docker-compose 说“docker-compose up 通过停止并重新创建容器来获取更改”时,这意味着它正在做相当于:

docker stop <somecontainer>
docker rm <somecontainer>
docker run ...

(其中 ... 表示您 docker-compose.yaml 中的服务定义所隐含的任何配置)。

假设它识别出 container1 的变化(不是真的,通过 API 工作):

docker compose rm -fs container1
docker compose create (--build) container1
docker compose start container1

什么部分接近(取决于你的compose-config):

docker rm -f projectname_container1
(docker build --flags)
docker create --allDozensOfAttributes projectname_container1
docker start  projectname_container1
docker network connect (--flags) projectname_networkname projectname_container1
and maybe more..

所以我建议对单个服务使用 docker 组合命令而不是 docker cli(如果合适的话)..