2016-07-24 106 views
-1

我以交互模式运行一些容器。Docker:附加容器的新参数

docker run -i -t --name mycontainer myimage prm1 prm2 

ENTERYPOINT是我使用参数的应用程序。

会议结束后,我想开始一个新的参数。

docker start mycontainer 
docker attach mycontainer 

如何将新参数传递到新会话中?

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

+0

对主持人的注意事项:码头问题是关于堆栈溢出主题的100%。您将在Stack Overflow上找到关于容器和Dockerfile的数千个类似问题。 – VonC

回答

1

,如果你离开你的ENTRYPOINT为默认(sh -cmy_application),并使用CMD而不是为命令参数

CMD prm1 prm2 

这意味着,在默认情况下,码头工人,运行时会使用PRM1 PRM2由这是最好的默认情况下,但您可以通过在下一个泊坞窗运行中传递新参数轻松覆盖它们。


该方法(上述)基于运行新容器而不是重新启动“已退出”的方法。

这是常见的做法,作为持久性数据应保存在一个体积(docker volume create),你(重新)安装到新的容器(docker run -v

如果你要重新启动容器,并从中受益从不同参数,那就要看你的应用程序:

  • 如果说应用程序可以读取环境变量这些参数,新docker update命令(PR 15078,仍然issue 22490开放)确实但如果说应用程序可以读取这些属性文件中,你可以使用docker cp复制到该容器的上述财产文件的更新版本,在新的特性更新环境变量(仅CPU和内存)
  • 它。
+0

让我澄清。应用程序使用参数,但默认情况下没有参数。所以,当我创建容器时,我可以轻松地传递任何参数。但是当我重新启动(启动+附加)容器时,不清楚如何传递新的参数。 –

+1

@DmitryPetrov你不需要重新启动:你只需启动(运行)一个新的容器) – VonC

+0

@DmitryPetrov“默认情况下没有参数。” :那是因为你正在使用ENTRYPOINT。如果您正在使用CMD,则默认情况下会有参数。 – VonC