docker 的前臺模式和後臺模式
阿新 • • 發佈:2018-12-19
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