我熟悉LXC並希望嘗試docker。我面臨的問題是,我找不到一個方法來告訴docker在後臺啓動容器,而不執行命令。例如,LXC我會做:使用Docker啓動容器而不指定命令
lxc create -t ubuntu -n my_container
lxc-start -n my_container -d
在這一點上我會運行的容器,我可以爲任何VM(ssh來使用它,安裝的東西在裏面...... ) 泊塢窗似乎阻止了這種用法。我錯過了什麼嗎?
我熟悉LXC並希望嘗試docker。我面臨的問題是,我找不到一個方法來告訴docker在後臺啓動容器,而不執行命令。例如,LXC我會做:使用Docker啓動容器而不指定命令
lxc create -t ubuntu -n my_container
lxc-start -n my_container -d
在這一點上我會運行的容器,我可以爲任何VM(ssh來使用它,安裝的東西在裏面...... ) 泊塢窗似乎阻止了這種用法。我錯過了什麼嗎?
隨着泊塢窗,從CLI,你不能沒有在其上運行一個命令創建一個容器。 如果您想使用REST API,您可以在不啓動'開始'的情況下調用'創建'端點。
但是,我認爲這對你沒有任何好處。
在大多數情況下,您可能只是想運行一個容器與bash docker run -t -i ubuntu bash
並在那裏做東西。一旦你完成了你所需要的一切,你可以簡單地從這個角度提交和運行。
但是,通常情況下,最好一次只做一步,以保持清晰的歷史記錄。看看Docker builder :)
您可以構建包含運行命令和其他配置的Docker映像,以便docker run <image>
將啓動容器。最簡單的方法是使用Docker Builder中的CMD
。您需要最新版本的Docker(> 0.4.6?)。
使用Docker Builder之外,請檢查docker commit
和docker run
(其中命令參數是可選的)的標誌。
根據文檔,命令參數確實是可選的,但是,docker run -d b750fe79269d正在抱怨「沒有指定命令」 – rmonjo
@rmonjo當Dockerfile中沒有指定CMD時,會得到該錯誤。在'docker run'結尾處簡單添加你想要在容器中運行的內容。例如bash –
當我需要檢查一個Docker容器時,我已經創建了Dockerfile中運行正常CMD的問題,我將該命令註釋掉並替換爲「sleep」命令在啓動時暫停容器,以便我可以登錄並檢查安裝。
在Dockerfile
CMD ["sleep","3600"]
要登錄到正在運行的泊塢窗實例
docker exec -i -t <Container ID> bash
這裏添加一些想法,因爲我是用這個自己玩耍。
比方說,我想用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]:~/$
參見運行:
謝謝!他們必須在「集裝箱式」操作系統上取消強大的功能!在容器中運行'ps -ef'命令只會輸出我正在運行的進程。任何想法他們如何實現這一點? – rmonjo
這是PID命名空間。 – creack