第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

docker exec 和 docker attach的區(qū)別?

docker exec 和 docker attach的區(qū)別?

一只萌萌小番薯 2018-09-04 10:07:56
docker exec 和 docker attach的區(qū)別
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊

Docker exec與Docker attach

不論是開發(fā)者是運(yùn)維人員,都經(jīng)常有需要進(jìn)入容器的訴求。
目前看,主要的方法不外乎以下幾種:
1. 使用ssh登陸進(jìn)容器
2. 使用nsenter、nsinit等第三方工具
3. 使用docker本身提供的工具

方法1需要在容器中啟動(dòng)sshd,存在開銷和攻擊面增大的問題。同時(shí)也違反了Docker所倡導(dǎo)
的一個(gè)容器一個(gè)進(jìn)程的原則。
方法2需要額外學(xué)習(xí)使用第三方工具。
所以大多數(shù)情況最好還是使用Docker原生方法,Docker目前主要提供了Docker exec和
Docker attach兩個(gè)命令。

以下在fedora21,docker1.7上驗(yàn)證。

Docker attach

Docker attach可以attach到一個(gè)已經(jīng)運(yùn)行的容器的stdin,然后進(jìn)行命令執(zhí)行的動(dòng)作。
但是需要注意的是,如果從這個(gè)stdin中exit,會(huì)導(dǎo)致容器的停止。

[root@localhost temp]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2327e7eab0ed busybox:buildroot-2014.02 "/bin/sh" About a minute ago Up About a minute bb2
[root@localhost temp]# docker attach bb2
/ # ls
bin dev etc home lib lib64 linuxrc media mnt opt proc root run sbin sys tmp usr var
/ # pwd
/
/ #

Docker exec

關(guān)于-i、-t參數(shù)

可以看出只用-i時(shí),由于沒有分配偽終端,看起來像pipe執(zhí)行一樣。但是執(zhí)行結(jié)果、命令
返回值都可以正確獲取。

[root@localhost temp]# docker exec -i bb2 /bin/sh
date
Tue Jul 14 04:01:11 UTC 2015
echo $?
0
dir
/bin/sh: dir: not found
echo $?
127

使用-it時(shí),則和我們平常操作console界面類似。而且也不會(huì)像attach方式因?yàn)橥顺?,?dǎo)致
整個(gè)容器退出。
這種方式可以替代ssh或者nsenter、nsinit方式,在容器內(nèi)進(jìn)行操作。

[root@localhost temp]# docker exec -it bb2 /bin/sh
/ # pwd
/
/ # echo $?
0
/ # dir
/bin/sh: dir: not found
/ # echo $?
127

如果只使用-t參數(shù),則可以看到一個(gè)console窗口,但是執(zhí)行命令會(huì)發(fā)現(xiàn)由于沒有獲得stdin
的輸出,無法看到命令執(zhí)行情況。

[root@localhost temp]# docker exec -t bb2 /bin/sh
/ # pwd

hanging....
[root@localhost temp]# docker exec -t bb2 pwd
/
[root@localhost temp]# echo $?
0
[root@localhost temp]# docker exec -t bb2 dir
2015/07/14 04:03:57 docker-exec: failed to exec: exec: "dir": executable file not found in $PATH
[root@localhost temp]# echo $?
0

docker exec執(zhí)行后,會(huì)命令執(zhí)行返回值。(備注Docker1.3似乎有Bug,不能正確返回命令執(zhí)行結(jié)果)

[root@localhost temp]# docker exec -it bb cat /a.sh
echo "running a.sh"
exit 10
[root@localhost temp]# docker exec -t bb /a.sh
running a.sh
[root@localhost temp]# echo $?
10
[root@localhost temp]# docker exec -it bb /a.sh
running a.sh
[root@localhost temp]# echo $?
10
[root@localhost temp]# docker exec -i bb /a.sh
running a.sh
[root@localhost temp]# echo $?
10

關(guān)于-d參數(shù)

在后臺(tái)執(zhí)行一個(gè)進(jìn)程??梢钥闯觯绻粋€(gè)命令需要長時(shí)間進(jìn)程,使用-d參數(shù)會(huì)很快返回。
程序在后臺(tái)運(yùn)行。

[root@localhost temp]# docker exec -d bb2 /a.sh
[root@localhost temp]# echo $?
0

如果不使用-d參數(shù),由于命令需要長時(shí)間執(zhí)行,docker exec會(huì)卡住,一直等命令執(zhí)行完成
才返回。

[root@localhost temp]# docker exec bb2 /a.sh
^C[root@localhost temp]#
[root@localhost temp]#
[root@localhost temp]# docker exec -it bb2 /a.sh
^C[root@localhost temp]#
[root@localhost temp]# docker exec -i bb2 /a.sh
^C[root@localhost temp]# docker exec -t bb2 /a.sh
^C[root@localhost temp]#

查看完整回答
1 反對(duì) 回復(fù) 2018-09-18
  • 1 回答
  • 0 關(guān)注
  • 3757 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)