2013-06-30 51 views
10

我熟悉LXC並希望嘗試docker。我面臨的問題是,我找不到一個方法來告訴docker在後臺啓動容器,而不執行命令。例如,LXC我會做:使用Docker啓動容器而不指定命令

lxc create -t ubuntu -n my_container

lxc-start -n my_container -d

在這一點上我會運行的容器,我可以爲任何VM(ssh來使用它,安裝的東西在裏面...... ) 泊塢窗似乎阻止了這種用法。我錯過了什麼嗎?

回答

8

隨着泊塢窗,從CLI,你不能沒有在其上運行一個命令創建一個容器。 如果您想使用REST API,您可以在不啓動'開始'的情況下調用'創建'端點。

但是,我認爲這對你沒有任何好處。

在大多數情況下,您可能只是想運行一個容器與bash docker run -t -i ubuntu bash並在那裏做東西。一旦你完成了你所需要的一切,你可以簡單地從這個角度提交和運行。

但是,通常情況下,最好一次只做一步,以保持清晰的歷史記錄。看看Docker builder :)

+0

謝謝!他們必須在「集裝箱式」操作系統上取消強大的功能!在容器中運行'ps -ef'命令只會輸出我正在運行的進程。任何想法他們如何實現這一點? – rmonjo

+0

這是PID命名空間。 – creack

2

您可以構建包含運行命令和其他配置的Docker映像,以便docker run <image>將啓動容器。最簡單的方法是使用Docker Builder中的CMD。您需要最新版本的Docker(> 0.4.6?)。

使用Docker Builder之外,請檢查docker commitdocker run(其中命令參數是可選的)的標誌。

+1

根據文檔,命令參數確實是可選的,但是,docker run -d b750fe79269d正在抱怨「沒有指定命令」 – rmonjo

+1

@rmonjo當Dockerfile中沒有指定CMD時,會得到該錯誤。在'docker run'結尾處簡單添加你想要在容器中運行的內容。例如bash –

8

當我需要檢查一個Docker容器時,我已經創建了Dockerfile中運行正常CMD的問題,我將該命令註釋掉並替換爲「sleep」命令在啓動時暫停容器,以便我可以登錄並檢查安裝。

在Dockerfile

CMD ["sleep","3600"] 

要登錄到正在運行的泊塢窗實例

docker exec -i -t <Container ID> bash 
0

這裏添加一些想法,因爲我是用這個自己玩耍。

比方說,我想用3個泊塢窗容器的工作:

[email protected]:~$ docker run --name ubuntuContainer1 -itd ubuntu 
2ce602710fb9b84b6530e5a1072961627e91731aba8f8b019f346fc78df08d7c 
[email protected]:~$ docker run --name ubuntuContainer2 -itd ubuntu 
e32b0eb72456fc23222f3915c91afc77e06a7e37a073b11f7088fabe8fa4bf20 
[email protected]:~$ docker run --name ubuntuContainer3 -itd ubuntu 
40574f704dceb0378f48ebe01d014d598434093d649be13573911d9833d9825d 

看到他們不斷運行,即使我沒有問跑/斌/慶典明確

[email protected]:~$ 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 

我可以裝入容器中

[email protected]:~$ docker attach ubuntuContainer1 
[email protected]:/# 

我可以在容器中執行命令(例如安裝包) [R

[email protected]:/# apt-get update 

# ... omitting output 

[email protected]:/# 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) ... 
[email protected]:/# nodejs --version 
v0.10.25 

之後,我可以退出,並把一切都按CTRL-P CTRL-Q

[email protected]:/# [email protected]:~/$ 
[email protected]:~/$ 

參見運行: