从镜像创建Docker容器而不启动它



作为我部署策略的一部分,我正在使用Upstart管理Docker容器。

要做到这一点,我需要从注册表中提取一个映像,并创建一个命名的容器(如Upstart脚本建议运行容器won't管理生命周期)

是否有一种方法来创建容器而不首先运行图像?我不希望必须启动一个容器(这可能会带来副作用),停止它,然后在其他地方进行管理。

例如:

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

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

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

首先调整docker守护进程的运行方式。除了默认的unix套接字之外,还将其配置为侦听端口4243上的HTTP请求:

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

现在,您可以使用/containers/create端点来创建容器,而无需运行它:

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请求似乎更容易显示解决方案。

最新更新