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