【发布时间】:2019-11-12 10:28:10
【问题描述】:
【问题讨论】:
标签: ruby-on-rails ruby docker docker-api
【问题讨论】:
标签: ruby-on-rails ruby docker docker-api
你不需要做任何特别的事情。在 API 级别,docker run 做了三件事:
您链接到的 GitHub 项目有一些相当复杂的示例。 (它的API documentation 并没有说太多;例如,Docker::Container 文档大多只是列出了方法,而没有解释可以进入各种散列参数的内容。)如果您创建并启动容器,但不要t附加到它,它将具有docker run -d“在后台”运行容器的相同效果。
# Lifted from https://github.com/swipely/docker-api
# Create a Container.
container = Docker::Container.create('Cmd' => ['ls'], 'Image' => 'base')
# Start running the Container.
container.start
# It is "in the background", unless you specifically #attach to it or
# #wait for it.
【讨论】:
container.start之后我们会得到Exited状态
ls的东西作为主容器进程,如示例所示,它实际上会快速退出。这等效于docker run -d alpine ls(在标准 Docker Hub 映像中交换),并且出于相同的原因,这将在docker ps -a 输出中显示“Exited (0)”。
我找到解决方案:
container = Docker::Container.create('Cmd' => ["tail", "-f", "/dev/null"], 'Image' => 'some_image')
container.start
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08564fe29591 some_image "tail -f /dev/null" 20 seconds ago Up 10 seconds nervous_ardinghelli
容器启动后未退出,可以在这个容器中执行!
【讨论】: