亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

Docker 容器操作退出后進入解決辦法

2024-09-01 13:48:42
字體:
來源:轉載
供稿:網友

在我們對Docker容器操作的時候,有時候會誤操作或者其他的原因無意間退出了正在操作的容器,也許你會擔憂你在其中的一些操作未保存下來,無須擔憂,本文中將會提供各種方法供你參考(我的建議使用最后一種)。在本文,我們將討論五種(4+1)連接Docker容器并與其進行交互的方法。例子中所有的代碼都可以在GitHub中找到,你可以親自對它們進行測試。

1.nsenter

安裝

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

你也可以點擊此鏈接進行下載  http://pan.baidu.com/s/1FEt8y

$ 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 可以訪問另一個進程的名字空間。nsenter 要正常工作需要有 root 權限。 很不幸,Ubuntu 14.4 仍然使用的是 util-linux 2.20。安裝最新版本的 util-linux(2.24)版,請按照以下步驟:

$ 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  

從util-linux版本2.23開始,nsenter工具就包含在其中。它用來訪問另一個進程的名字空間。nsenter要正常工作需要有root權限。很不幸,Ubuntu 14.4仍然使用的是util-linux版本2.20。安裝最新版本的util-linux(2.24)版,請按照以下步驟:

cd /tmp

為了連接到容器,你還需要找到容器的第一個進程的PID,通過這個PID,你就可以連接到這個容器:

$ docker inspect --format "{{ .State.Pid }}" <container-id> //or run 'docker inspect -f "{{ .State.Pid }}" <container-id>' $ nsenter --target $PID --mount --uts --ipc --net --pid 

2.nsinit

從0.9版本開始,Docker自身就具有一個管理容器的庫,名字為 libcontainer。libcontainer中的nsinit工具允許用戶直接訪問linux名字空間和cgroup內核。在安裝nsinit之前,你首先需要安裝Go運行時環境:

$ apt-get installgit golang-go   $ mkdir-p $HOME/go-dev/binmkdir-p $HOME/go-dev/src  $ echo"export GOPATH=/$HOME/go-dev" >> ~/.profileecho "PATH=/$PATH:/$GOPATH/bin">> ~/.profile   $ source~/.profile  

接下來才安裝nsinit:

$ apt-get installgit golang-go   $ mkdir-p $HOME/go-dev/binmkdir-p $HOME/go-dev/src  $ echo"export GOPATH=/$HOME/go-dev" >> ~/.profileecho "PATH=/$PATH:/$GOPATH/bin">> ~/.profile   $ source~/.profile  

nsinit讀取的是位于/var/lib/docer/execdriver/native/<Container-id>容器目錄下的配置數據。要運行nsinit,你需要切換到容器目錄下。由于/var/lib/docker目錄對于root用戶是只讀權限,因此你還需要root權限。通過docker的ps命令,你可以確定容器ID。一旦你進入/var/lib/docker目錄,你就可以連接容器了:

nsinit exec /bin/bash 

3.lxc(-attach)

直到Docker 0.8.1版本為止,LXC一直是管理容器的基本工具,Docker一直支持這個工具。但是從0.9.0版本開始,Docker默認使用libcontainer管理容器,不再依賴LXC了。因此默認情況下,你不能使用lxc-attach了。

如果你仍然希望使用lxc-attach,那么你需要使用-e lxc選項來重新啟動Docker服務進程。使用這個選項,Docker的內部將再次使用LXC管理容器了。完成這個任務最簡單的做法就是創建/etc/default/docker文件(如果這個文件仍然不存在),并添加以下內容:

DOCKER_OPTS=" -e lxc" 

現在你可以重新啟動Docker服務了。要連接容器,你需要知道完整的容器ID:

docker ps --no-trunc  

接下來,你就可以連接這個容器了。要完成下面工作,你還需要root權限:

lxc-attach -n <container-id> -- /bin/bash 

 4.sshd

上面所有三種方法都要求具有主機系統的root權限。為了不采用root權限,通過ssh訪問容器將是一個很好的選擇。

要做到這一點,你需要構建一個支持SSH服務的基礎映像。此時,我們可能遇到這樣的問題:我們是不是用Docker CMD或者ENTRYPOINT運行一條命令就可以了?如果此時有sshd進程運行,那么我們就不要再運行其他進程了。接下來的工作是創建一個腳本或者使用像supervisord這樣的進程管理工具來啟動其它所有需要啟動的進程。有關如何使用supervisord的優秀的文檔可以在Docker的web站點上找到。一旦你啟動了具有sshd進程的容器,你就可以像以往一樣通過ssh客戶端了連接這個容器了。

結論

sshd方法可能是最簡單的連接容器的方法,而且大多數用戶習慣通過ssh連接虛擬機。另外,連接容器時你也不需要一定使用root權限。不過,對于是否一個容器是否應當管理不止一個進程仍然存在許多爭議。這種方法最終使得每個容器了多了一個sshd進程,這從根本上來說不是進程虛擬化的所提倡的。

另外三種方法都需要root權限。到0.8.1版本為止,Docker都是使用LXC來管理容器的。正是由于這個原因,使用lxc-attach連接容器就非常容易。不過從版本0.9.0開始Docker服務就必須使用 -e lxc選項啟動才能在內部支持LXC管理容器。不過,由于設置了這個選項,Docker將再次依賴LXC,而LXC可能隨著發布或者安裝的不同可能被剔除。

nsenter和nsinit總的來說是相同的。這兩個工具的主要區別是nsinit在本身的容器了建立了一個新的進程,而nsenter只是訪問了名字空間。Jerome Petazzoni在Docker博客文章里對這一點說的很透徹。 

上面的幾種方法我也曾試過,他們基本上都是進入正在運行中的容器,nsenter還可實現多終端對一個容器的操作。如果進入已經終止的容器,第一次安裝執行的時候是可以的,可以得到PID的值,不過之后再執行的時候發現PID的值為0,如果你接著執行

<del>nsenter --target $PID --mount --uts --ipc --net --pid</del> 

你會發現 切換到了宿主機的超級管理員權限。

正確的方法會在下面介紹,首先先補充一下一些命令的參數的含義:

 查看鏡像

    docker images: 列出images

    docker images -a :列出所有的images(包含歷史)

    docker images --tree :顯示鏡像的所有層(layer)

    docker rmi  <image ID>: 刪除一個或多個image

查看容器

    docker ps :列出當前所有正在運行的container
    docker ps -l :列出最近一次啟動的container
    docker ps -a :列出所有的container(包含歷史,即運行過的container)
    docker ps -q :列出最近一次運行的container ID

 5.重點來了:

$ docker ps -a CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS      PORTS    NAMES 9cff554fb6d7    ubuntuold:14.04   /bin/bash      About an hour ago  Up About an hour    condescending_blackwell   e5c5498881ed    ubuntuold:14.04   /bin/bash      About an hour ago  Exited (0) 55 minutes ago backstabbing_bardeen  

    通過以上的信息可以看出兩者之間的差別:前者是正在運行的容器;而后者是已經終止的容器(Exited(0))。

    docker start/stop/restart<container> :開啟/停止/重啟container
    docker start [container_id] :再次運行某個container(包括歷史container)
    docker attach [container_id]:連接一個正在運行的container實例(即實例必須為start狀態,可以多個窗口同時attach一個container實例)
    docker start -i <container>:啟動一個container并進入交互模式(相當于先start,在attach)

就以后者e5c5498881ed為例:首先執行

$ docker start e5c5498881ed //之后再一次查看的時候Exited(0)已經沒有了,也就是說明該容器已經從終止的狀態變為了正在運行的狀態  $docker attach e5c5498881ed //你會的發現已經進入該容器了,而且之前的操作的文件依然存在 //如果沒有反應的話,再一次點擊回車即可 

    docker run -i -t <image> /bin/bash:使用image創建container并進入交互模式, login shell是/bin/bash

    docker run -i -t -p <host_port:contain_port>:映射 HOST 端口到容器,方便外部訪問容器內服務,host_port 可以省略,省略表示把 container_port映射到一個動態端口。

   注:使用start是啟動已經創建過得container,使用run則通過image開啟一個新的container。

 附加:

查看root密碼

   docker容器啟動時的root用戶的密碼是隨機分配的。所以,通過這種方式就可以得到容器的root用戶的密碼了。

docker logs 5817938c3f6e 2>&1 | grep 'User: ' | tail -n1 

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美欧洲在线观看| 亚洲精品国产精品久久清纯直播| 中文字幕欧美国内| 国产精品久久久久免费a∨大胸| 欧美极品少妇xxxxx| 18一19gay欧美视频网站| 亚洲人成电影网站色xx| 福利视频导航一区| 91亚洲精品在线观看| 精品女同一区二区三区在线播放| 成人写真视频福利网| 久久久久国产精品www| 亚洲精品久久久久久久久| 中文字幕精品一区二区精品| 色悠久久久久综合先锋影音下载| 日韩精品免费在线视频| 91精品美女在线| 国产精品无码专区在线观看| 992tv在线成人免费观看| 91午夜理伦私人影院| 日韩欧美一区视频| 这里只有精品视频在线| 国产亚洲综合久久| 久久中文精品视频| 91在线高清免费观看| 日本精品va在线观看| 亚洲精品动漫100p| 欧美国产日本在线| 亚洲小视频在线观看| 日韩欧美中文免费| 在线成人激情黄色| 亚洲护士老师的毛茸茸最新章节| 亚洲香蕉伊综合在人在线视看| 国产精品视频yy9099| 亚洲高清免费观看高清完整版| 日韩精品视频在线观看免费| 国产精品av网站| 欧美日韩在线一区| 精品国产自在精品国产浪潮| www.欧美精品一二三区| 亚洲黄色www| 伊人久久免费视频| 成人性生交大片免费看小说| 欧美裸体男粗大视频在线观看| 日韩动漫免费观看电视剧高清| 欧美激情精品久久久久久蜜臀| 黑人巨大精品欧美一区二区| 国产高清视频一区三区| 亚洲国产一区二区三区在线观看| 欧美激情精品久久久| 美女福利精品视频| 国产91精品在线播放| 欧美激情a在线| 亚洲第一色中文字幕| 色av中文字幕一区| 韩国三级电影久久久久久| 亚洲网站在线播放| 国产大片精品免费永久看nba| 欧美成人一区在线| 亚洲韩国欧洲国产日产av| 久久精品99国产精品酒店日本| 欧美日韩另类视频| 欧美激情在线视频二区| 亚洲欧美综合区自拍另类| 欧美日韩一区二区三区在线免费观看| 98视频在线噜噜噜国产| 日韩成人在线观看| 欧美极品少妇全裸体| 97精品国产97久久久久久免费| 宅男66日本亚洲欧美视频| 国产精品日韩欧美综合| 久久99久国产精品黄毛片入口| 亚洲一区二区久久久久久| 国自产精品手机在线观看视频| 精品一区二区亚洲| 6080yy精品一区二区三区| 欧美精品情趣视频| 欧美成人在线影院| 欧美性极品xxxx娇小| 国产精品久久在线观看| 久久久亚洲国产| 欧美成人精品激情在线观看| 国产日韩欧美成人| 亚洲福利视频久久| 欧美日韩福利电影| 另类美女黄大片| 久久这里有精品视频| 亚洲国产高清自拍| 国产视频精品自拍| 精品国产乱码久久久久久虫虫漫画| 国产丝袜一区二区| 国产精品女人久久久久久| 中文字幕日韩欧美| 性欧美亚洲xxxx乳在线观看| 亚洲国产精品系列| 日韩欧美一区视频| 蜜月aⅴ免费一区二区三区| 夜夜嗨av一区二区三区免费区| 中文字幕不卡av| 青青青国产精品一区二区| 欧美孕妇孕交黑巨大网站| 91网站在线看| 欧美日韩亚洲一区二区| 亚洲日韩欧美视频一区| 亚洲精品电影久久久| 福利精品视频在线| 亚洲理论在线a中文字幕| 久久久久久久久久久免费| 国产乱肥老妇国产一区二| 欧美在线xxx| 有码中文亚洲精品| 伊人激情综合网| 日韩视频免费大全中文字幕| 2019中文字幕免费视频| 91精品国产自产在线老师啪| 国产欧美日韩中文| 亚洲国产精品一区二区三区| 精品女同一区二区三区在线播放| 日韩精品高清在线观看| 中文字幕亚洲在线| 欧美高跟鞋交xxxxhd| 国内精品久久影院| 日韩中文字幕免费视频| 亚洲美女av电影| 国产a∨精品一区二区三区不卡| 日韩中文字幕网站| 97精品伊人久久久大香线蕉| 欧美大片免费看| 精品高清一区二区三区| 久久99视频精品| 精品动漫一区二区| 久久精品国产清自在天天线| 精品亚洲一区二区三区在线观看| 亚洲成人久久电影| 久久福利视频导航| 亚洲精品美女网站| 国产亚洲一级高清| 欧美国产高跟鞋裸体秀xxxhd| 国产精品色婷婷视频| 欧美激情一区二区久久久| 欧美日韩中文字幕在线| 亚洲最新视频在线| 欧美多人爱爱视频网站| 亚洲精品国产精品国自产观看浪潮| 亚洲国产精品女人久久久| 久久免费福利视频| 91久久综合亚洲鲁鲁五月天| 青青久久av北条麻妃海外网| 国外成人在线播放| 黑人狂躁日本妞一区二区三区| 亚洲xxx大片| 国产亚洲日本欧美韩国| 欧美激情精品久久久久久蜜臀| 日韩欧美国产一区二区| 欧美性xxxx18| 欧美激情中文字幕在线| 久久精视频免费在线久久完整在线看| 亚洲人精选亚洲人成在线| 91av在线精品| 亚洲视频在线免费看| 欧美精品在线免费| 中文字幕在线视频日韩| 亚洲成av人乱码色午夜| 欧美成人sm免费视频|