2017-04-09 153 views
0

我能夠在從docker/whalesay圖像創建的容器中運行任意shell命令。如何在Docker鏡像的新容器中運行bash?

$ docker run docker/whalesay ls -l 
total 56 
-rw-r--r-- 1 root root 931 May 25 2015 ChangeLog 
-rw-r--r-- 1 root root 385 May 25 2015 INSTALL 
-rw-r--r-- 1 root root 1116 May 25 2015 LICENSE 
-rw-r--r-- 1 root root 445 May 25 2015 MANIFEST 
-rw-r--r-- 1 root root 1610 May 25 2015 README 
-rw-r--r-- 1 root root 879 May 25 2015 Wrap.pm.diff 
drwxr-xr-x 2 root root 4096 May 25 2015 cows 
-rwxr-xr-x 1 root root 4129 May 25 2015 cowsay 
-rw-r--r-- 1 root root 4690 May 25 2015 cowsay.1 
-rw-r--r-- 1 root root 54 May 25 2015 install.pl 
-rwxr-xr-x 1 root root 2046 May 25 2015 install.sh 
-rw-r--r-- 1 root root 631 May 25 2015 pgp_public_key.txt 
$ docker run docker/whalesay lsb_release -a 
No LSB modules are available. 
Distributor ID: Ubuntu 
Description: Ubuntu 14.04.2 LTS 
Release: 14.04 
Codename: trusty 

但是,我無法運行在此圖像中創建一個容器外殼。

$ docker run docker/whalesay bash 
$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 
$ docker ps -a 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS       PORTS    NAMES 
7ce600cc9904  docker/whalesay  "bash"     5 seconds ago  Exited (0) 3 seconds ago       loving_mayer 

爲什麼它不起作用?我怎樣才能使它工作?

+0

什麼'ps'後你跑'bash'輸出? – Sundeep

+0

@Sundeep在我的問題中增加了'ps'的輸出。 –

+0

當你執行* docker exec -it 7ce600cc9904/bin/bash *時會發生什麼? – SilentMonk

回答

3

如果你docker run沒有附加一個tty,只有調用bash,然後bash找不到任何事情,它退出。這是因爲默認情況下,容器是非交互式的,並且以非交互模式運行的shell期望腳本運行。如果沒有,它會退出。

你可以簡單地附上一個tty和標準輸入。

docker run -it ... 

或者,如果你有一個正在運行的容器已經和希望與外殼進入它,使用exec代替:

docker exec -it <container-name-or-id> bash 

在評論你問

Do you know what is the difference between this and docker run -it --entrypoint bash docker/whalesay ?

在上面的兩個命令,您將bash指定爲CMD。在此命令中,您指定bash作爲ENTRYPOINT

每個容器使用的ENTRYPOINTCMD組合運行。如果您(或圖片)未指定ENTRYPOINT,則默認入口點爲/bin/sh -c

所以在前面的兩個命令,如果您運行bashCMD,默認ENTRYPOINT使用,則容器將使用

/bin/sh -c bash 

如果指定--entrypoint bash運行,則相反,它運行

bash <command> 

<command>是圖像中指定的CMD(如果指定的話)。

+0

感謝。 「碼頭運行 - 碼頭工人/ whalesay bash」的作品。你知道這和'docker run -it -entrypoint bash docker/whalesay'有什麼區別嗎? –

+0

@LoneLearner查看我的更新回答。 –

+0

謝謝!說得通。 'docker run -it --entrypoint ls docker/whalesay -l'確實執行'ls -l'並打印長列表格式的目錄列表。 –

相關問題