鍍金池/ 教程/ Linux/ 進(jìn)入容器
利用數(shù)據(jù)卷容器來(lái)備份、恢復(fù)、遷移數(shù)據(jù)卷
Docker 網(wǎng)絡(luò)實(shí)現(xiàn)
實(shí)戰(zhàn) Django
YAML 模板文件
名字空間
控制組
編輯網(wǎng)絡(luò)配置文件
列出
進(jìn)入容器
Compose 命令說(shuō)明
創(chuàng)建 Tomcat/Weblogic 集群
守護(hù)態(tài)運(yùn)行
快速配置指南
其它安全特性
示例:創(chuàng)建一個(gè)點(diǎn)到點(diǎn)連接
CentOS 系列安裝 Docker
數(shù)據(jù)卷容器
鏡像
指令
創(chuàng)建鏡像
Docker 容器
創(chuàng)建鏡像
常用倉(cāng)庫(kù)
總結(jié)
什么是 Docker
存出和載入鏡像
使用
獲取鏡像
容器互聯(lián)
為什么要使用 Docker?
使用 Wordpress 入門 Fig
啟動(dòng)
容器訪問(wèn)控制
私有倉(cāng)庫(kù)
使用
基本架構(gòu)
自定義網(wǎng)橋
環(huán)境變量參考
實(shí)戰(zhàn) Rail
服務(wù)端的防護(hù)
刪除
鏡像的實(shí)現(xiàn)原理
多臺(tái)物理主機(jī)之間的容器互聯(lián)
Docker 倉(cāng)庫(kù)
簡(jiǎn)介
數(shù)據(jù)卷
命令參考
使用 Supervisor 來(lái)管理進(jìn)程
移除
基本結(jié)構(gòu)
命令查詢
終止容器
聯(lián)合文件系統(tǒng)
安裝
簡(jiǎn)介
配置 DNS
內(nèi)核能力機(jī)制
導(dǎo)出和導(dǎo)入容器
配置 docker0 網(wǎng)橋
倉(cāng)庫(kù)配置文件
內(nèi)核名字空間
標(biāo)準(zhǔn)化開(kāi)發(fā)測(cè)試和生產(chǎn)環(huán)境
外部訪問(wèn)容器
fig.yml 參考
Ubuntu 系列安裝 Docker
有用資源
安裝
端口映射實(shí)現(xiàn)
安裝 Fig
工具和示例
簡(jiǎn)介
控制組
容器格式
Docker Hub

進(jìn)入容器

進(jìn)入容器

在使用 -d 參數(shù)時(shí),容器啟動(dòng)后會(huì)進(jìn)入后臺(tái)。 某些時(shí)候需要進(jìn)入容器進(jìn)行操作,有很多種方法,包括使用 docker attach 命令或 nsenter 工具等。

attach 命令

docker attach 是Docker自帶的命令。下面示例如何使用該命令。

$ sudo docker run -idt ubuntu
243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
243c32535da7        ubuntu:latest       "/bin/bash"         18 seconds ago      Up 17 seconds                           nostalgic_hypatia
$sudo docker attach nostalgic_hypatia
root@243c32535da7:/#

但是使用 attach 命令有時(shí)候并不方便。當(dāng)多個(gè)窗口同時(shí) attach 到同一個(gè)容器的時(shí)候,所有窗口都會(huì)同步顯示。當(dāng)某個(gè)窗口因命令阻塞時(shí),其他窗口也無(wú)法執(zhí)行操作了。

nsenter 命令

安裝

nsenter 工具在 util-linux 包2.23版本后包含。 如果系統(tǒng)中 util-linux 包沒(méi)有該命令,可以按照下面的方法從源碼安裝。

$ cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
$ ./configure --without-ncurses
$ make nsenter && sudo cp nsenter /usr/local/bin

使用

nsenter 可以訪問(wèn)另一個(gè)進(jìn)程的名字空間。nsenter 要正常工作需要有 root 權(quán)限。 很不幸,Ubuntu 14.04 仍然使用的是 util-linux 2.20。安裝最新版本的 util-linux(2.24)版,請(qǐng)按照以下步驟:

$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz; tar xzvf util-linux-2.24.tar.gz
$ cd util-linux-2.24
$ ./configure --without-ncurses && make nsenter
$ sudo cp nsenter /usr/local/bin

為了連接到容器,你還需要找到容器的第一個(gè)進(jìn)程的 PID,可以通過(guò)下面的命令獲取。

PID=$(docker inspect --format "{{ .State.Pid }}" <container>)

通過(guò)這個(gè) PID,就可以連接到這個(gè)容器:

$ nsenter --target $PID --mount --uts --ipc --net --pid

下面給出一個(gè)完整的例子。

$ sudo docker run -idt ubuntu
243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
243c32535da7        ubuntu:latest       "/bin/bash"         18 seconds ago      Up 17 seconds                           nostalgic_hypatia
$ PID=$(docker-pid 243c32535da7)
10981
$ sudo nsenter --target 10981 --mount --uts --ipc --net --pid
root@243c32535da7:/#

更簡(jiǎn)單的,建議大家下載 .bashrc_docker,并將內(nèi)容放到 .bashrc 中。

$ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
$ echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc

這個(gè)文件中定義了很多方便使用 Docker 的命令,例如 docker-pid 可以獲取某個(gè)容器的 PID;而 docker-enter 可以進(jìn)入容器或直接在容器內(nèi)執(zhí)行命令。

$ echo $(docker-pid <container>)
$ docker-enter <container> ls
上一篇:什么是 Docker下一篇:安裝