1. 程式人生 > >docker 的前臺模式和後臺模式

docker 的前臺模式和後臺模式

Detached(後臺模式) vs foreground(前臺模式)

當我們啟動一個容器時,首先需要確定這個容器是執行在前臺還是執行在後臺。

-d, --detach                      Run container in background and print container ID

Detached (-d)

如果在docker run後面追加-d=true或者-d,那麼容器將會執行在後臺模式。此時所有I/O資料只能通過網路資源或者共享卷組來進行互動。因為容器不再監聽你執行docker run的這個終端命令列視窗。但你可以通過執行docker attach來重新附著到該容器的會話中。需要注意的是,容器執行在後臺模式下,是不能使用--rm選項的。

Foregroud

在前臺模式下(不指定-d引數即可),Docker會在容器中啟動程序,同時將當前的命令列視窗附著到容器的標準輸入、標準輸出和標準錯誤中。也就是說容器中所有的輸出都可以在當前視窗中看到。甚至它都可以虛擬出一個TTY視窗,來執行訊號中斷。這一切都是可以配置的:

-a, --attach value                Attach to STDIN, STDOUT or STDERR (default [])
-t, --tty                         Allocate a pseudo-TTY
--sig-proxy                   Proxy received signals to the process (default true)
-i, --interactive                 Keep STDIN open even if not attached

如果在執行run命令時沒有指定-a引數,那麼Docker預設會掛載所有標準資料流,包括輸入輸出和錯誤,你可以單獨指定掛載哪個標準流。

$ sudo docker run -a stdin -a stdout -i -t ubuntu /bin/bash

如果要進行互動式操作(例如Shell指令碼),那我們必須使用-i -t引數同容器進行資料互動。但是當通過管道同容器進行互動時,就不需要使用-t引數,例如下面的命令:

echo test | docker run -i busybox cat