从图像创buildDocker容器而不启动它

作为我的部署策略的一部分,我使用Upstartpipe理Docker容器。

要做到这一点,我需要从registry中拉出一个图像,并创build一个指定的容器(如在Upstart脚本上build议运行容器将不会pipe理生命周期 )

有没有办法创build容器,而不先运行图像? 我不想启动一个容器(这可能会引入副作用),停止它,然后在其他地方pipe理。

例如,像这样的东西:

docker.io create -e ENV1=a -e ENV2=b -p 80:80 --name my_first_container sample/containe 

你可以通过使用Docker Remote API来实现。

首先调整docker守护进程的运行方式。 将其configuration为侦听端口4243上的HTTP请求以及默认的unix套接字:

 sudo sh -c "echo 'DOCKER_OPTS=\"-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock\"' > /etc/default/docker" 

现在,您可以使用/containers/create端点创build一个容器而不运行它:

 curl -X POST -H "Content-Type: application/json" http://localhost:4243/containers/create?name=my_first_container -d ' { "Name": "dtest2", "AttachStdin": "false", "AttachStdout": "false", "AttachStderr": "false", "Tty": "false", "OpenStdin": "false", "StdinOnce": "false", "Cmd":["/bin/bash", "-c", "echo Starting;sleep 20;echo Stopping"], "Image": "ubuntu", "DisableNetwork": "false" } ' 

请注意我添加到curl请求url的?name=my_first_container参数。 这是你如何命名你的容器。

注意事项 – 不用添加HTTP接口也可以实现,但使用简单的curl POST请求显示解决scheme似乎更容易。

如果有人遇到这个问题,现在可以通过docker create命令来完成。 见https://docs.docker.com/engine/reference/commandline/create/