TLDR:当使用docker compose 时,我可以通过在运行docker-compose up
的沿着更改docker-compose.yml
文件中的配置和/或映像来简单地 * 重新创建 * 一个容器。对于重新创建一个由docker create/run命令创建的容器(以应用更改),是否有任何通用的等效方法?
详细说明一下:
associated docker compose documentation声明:
如果服务已有容器,并且服务的配置或映像在容器创建后发生了更改,则docker-composite up会通过停止并重新创建容器(保留已装载的卷)来获取更改。
我很难理解在这个 recreation 过程中实际执行了哪些底层步骤,因为例如docker(没有编写)文档似乎根本没有真正使用 recreate 术语。
简单地运行docker container rm xy
然后运行docker container create/run
(沿着传递完整的和修改过的配置)安全吗?或者docker compose实际上在幕后做了更多的事情吗?
我已经找到了关于应用 * 特定 * 配置更改(例如this one about port mappings)的答案,但我仍然想知道是否有更通用的答案。
3条答案
按热度按时间uyto3xhc1#
我很难理解在这个重新创建过程中实际执行了哪些底层步骤,例如,docker(没有编写)文档似乎根本没有真正使用recreate术语。
docker-compose
是一个高级工具;它使用docker
cli在单个操作中执行需要多个命令才能执行的操作。当docker-compose
显示“docker-composite up pickup the changes by stopping and recreating the container”时,表示它执行的操作相当于:(其中
...
表示docker-compose.yaml
中的服务定义所隐含的任何配置)。svmlkihl2#
假设它识别出
container1
中的更改(实际上不是,通过API工作):部分接近于什么(取决于您的合成配置):
因此,如果合适的话,我建议对单个服务使用Docker编写命令,而不是Docker CLI。
rqmkfv5c3#
问题是变量和设置没有通过任何docker apis公开,可以通过直接连接到docker套接字,解析变量,然后停止/删除容器并重新创建它。
这很容易导致各种错误,并且需要进行大量调试才能获得这些值。
我所做的只是将我的Docker命令存储在一个shell脚本中。你可以将需要运行的命令保存到一个文本文件中,命名为.sh,在文件上设置-x,然后运行它。然后,当你停止/删除容器时,你可以重新运行shell脚本。
你可以做的另一件事是用一个函数来替换docker命令(比如~/.bashrc),这个函数将参数存储到一个文本文件中,然后用一个传递的参数来重新检查这个文本文件(比如“recreate”后面跟一个名字)。