Docker:附加容器的新参数

Docker:附加容器的新参数,docker,Docker,我在交互模式下运行一个带有一些参数的容器 docker run -i -t --name mycontainer myimage prm1 prm2 ENTERYPOINT是我使用参数的应用程序 会话结束后,我想用新参数开始一个新的会话 docker start mycontainer docker attach mycontainer 如何将新参数传递到新会话中 PS:这是交互式docker应用程序的合适场景吗?或者我应该为每个新会话创建一个新容器?最好将您的应用程序保留为默认值(sh-c

我在交互模式下运行一个带有一些参数的容器

docker run -i -t --name mycontainer myimage prm1 prm2
ENTERYPOINT是我使用参数的应用程序

会话结束后,我想用新参数开始一个新的会话

docker start mycontainer
docker attach mycontainer
如何将新参数传递到新会话中


PS:这是交互式docker应用程序的合适场景吗?或者我应该为每个新会话创建一个新容器?

最好将您的应用程序保留为默认值(
sh-c
my_应用程序
),并将其用作命令参数

CMD prm1 prm2
这意味着,默认情况下,docker运行将默认使用prm1 prm2,但您可以通过在下一个docker运行中传递新参数轻松覆盖它们


上述方法基于运行一个新容器,而不是重新启动一个“已退出”的容器

这是常见的做法,因为持久性数据应该保存在卷()中,然后(重新)装载到新容器上(
docker run-v

如果要重新启动容器,并从不同的参数中获益,则这取决于您的应用程序:

  • 如果所述应用程序可以从环境变量中读取这些参数,则新命令(,仍然打开)不会更新环境变量(仅cpu和内存)
  • 如果所述应用程序可以从属性文件中读取这些内容,您可以使用将所述属性文件的更新版本复制到该容器中,其中包含新属性

主持人注意:docker问题100%都是关于堆栈溢出的主题。您将在这里找到数千个关于容器和Dockerfile的类似问题,关于堆栈溢出。让我澄清一下。应用程序使用参数,但默认情况下没有参数。因此,在创建容器时,我可以轻松地传递任何参数。但是,当我重新启动(启动+附加)容器时,不清楚如何传递新参数。@DmitryPetrov您不需要重新启动:您只需启动(运行)一个新容器)@DmitryPetrov“默认情况下没有参数。”:这是因为您使用的是入口点。如果您使用CMD,默认情况下会有一个参数。明白了。我知道这是一种常见的docker实践,用于长期运行的守护程序应用程序。我试图通过重新启动来长时间保留交互式(而不是守护进程)容器。创建一个新容器是对交互式应用程序资源的浪费。但这看起来是最好的选择。