使用Docker启动容器而不指定命令

时间:2013-06-30 14:51:49

标签: lxc docker

我熟悉LXC,想试试docker。我面临的问题是我无法找到一种方法来告诉docker在后台启动容器而不执行命令。例如,使用LXC我会这样做:

lxc create -t ubuntu -n my_container

lxc-start -n my_container -d

此时我将有一个可以用作任何VM的运行容器(ssh到它,在其中安装东西......) 似乎docker阻止了这种用法。我错过了什么吗?

4 个答案:

答案 0 :(得分:21)

当我需要检查我创建的Docker容器在Dockerfile中运行正常CMD时遇到问题时,我注释掉该命令并用“sleep”命令替换它只是在容器启动时暂停容器所以我可以登录并检查安装。

在Dockerfile中

CMD ["sleep","3600"]

登录正在运行的Docker实例

docker exec -i -t <Container ID> bash

答案 1 :(得分:10)

使用docker,在CLI中,如果没有在其上运行命令,则无法创建容器。 如果您想使用REST Api,可以在没有'start'的情况下调用'create'端点。

然而,我认为这对你没什么好处。

在大多数情况下,您可能只想运行一个包含bash docker run -t -i ubuntu bash的容器并在那里执行操作。一旦你完成了所需的一切,你就可以简单地提交并运行。

然而,通常情况下,最好一次做一步以保持清晰的历史。看看Docker构建器:)

答案 2 :(得分:2)

您可以构建包含运行命令和其他配置的Docker镜像,以便docker run <image>启动容器。最简单的方法是使用Docker Builder中的CMD。您需要最新版本的Docker(&gt; 0.4.6?)。

在使用Docker Builder之外,请查看docker commitdocker run的标志(其中命令参数是可选的)。

答案 3 :(得分:0)

在这里添加更多想法,因为我自己正在玩这个。

让我们说我想使用3个泊坞容器:

blong@mycomputer:~$ docker run --name ubuntuContainer1 -itd ubuntu 
2ce602710fb9b84b6530e5a1072961627e91731aba8f8b019f346fc78df08d7c
blong@mycomputer:~$ docker run --name ubuntuContainer2 -itd ubuntu 
e32b0eb72456fc23222f3915c91afc77e06a7e37a073b11f7088fabe8fa4bf20
blong@mycomputer:~$ docker run --name ubuntuContainer3 -itd ubuntu 
40574f704dceb0378f48ebe01d014d598434093d649be13573911d9833d9825d

看到他们继续运行,即使我没有要求明确地运行/ bin / bash

blong@mycomputer:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
40574f704dce        ubuntu              "/bin/bash"         2 seconds ago       Up 1 seconds                            ubuntuContainer3
e32b0eb72456        ubuntu              "/bin/bash"         5 seconds ago       Up 4 seconds                            ubuntuContainer2
2ce602710fb9        ubuntu              "/bin/bash"         8 seconds ago       Up 7 seconds                            ubuntuContainer1

我可以装入容器

blong@mycomputer:~$ docker attach ubuntuContainer1
root@2ce602710fb9:/# 

我可以在容器中执行命令(例如安装包)

root@2ce602710fb9:/# apt-get update

# ... omitting output

root@2ce602710fb9:/# apt-get install nodejs
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libc-ares2 libv8-3.14.5
The following NEW packages will be installed:
  libc-ares2 libv8-3.14.5 nodejs
0 upgraded, 3 newly installed, 0 to remove and 5 not upgraded.
Need to get 1912 kB of archives.
After this operation, 7538 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y

# ... omitting output

Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
root@2ce602710fb9:/# nodejs --version
v0.10.25

之后,我可以退出,按CTRL-p CTRL-q

保持一切正常运行
root@2ce602710fb9:/# blong@mycomputer:~/$ 
blong@mycomputer:~/$ 

另见:

相关问题