docker登錄運行中的容器的4方案


目前容器雲非常的成熟,也有很多的使用案例,可以說不是什么高大上的東西了,可以說整個雲計算也不是什么奢侈品,而是基礎設施。但是如何使用,就成了必須的技術。

 

今天記錄下,基於docker的容器登錄技術。

 

通常情況下,我們想看看運行中的docker容器的狀態,尤其是想看看容器內部的應用配置,比如tomcat的配置信息,該怎么操作呢?當然了,你會說,直接docker inspect containerId,找到workdir,或者配置文件路徑,然后docker cp從容器中拷貝到宿主機上。這些都是處理靜態問題的辦法,但是能否直接登錄到容器上呢?

 

答案是有的,比較docker容器如此優秀出色。

 

准備工作,先啟動一個docker容器,在后台運行,方便講解后面的操作方法。

1.查看當前有些什么鏡像。

2. 然后啟動一個

以后台的方式啟動tomcat:9.0.2,容器主機名login,將宿主機的9999端口映射到容器的8080上,容器的名稱logindocker。

[root@tkwms-web wmsuser]# docker run -it --name logindocker -h login -p 9999:8080 tomcat:9.0.2 /bin/bash

3.查看啟動后的容器信息

 

有好幾種辦法,可以直接連接上運行中的docker容器。下面就說常用的4種吧:

1. docker attach <ContainerID>

A. 登錄后,就直接看到類似登錄主機的感覺。然后,做什么操作,都可以進行了。另外,這里有一個問題需要注意,那就是如何退出docker attach連上的容器呢?是不是個問題?直接ctrl+c,肯定是不行的,因為有可能會導致容器掛掉, exit呢?也是會導致容器死掉的。有辦法嗎?答案是有的。直接在登錄上的容器命令行下輸入ctrl+p+q,就可以安全退出了。


B. 存在的問題:多人同時attach到同一個容器的時候,大家看到的是相同的內容,其中一個人卡頓,其他人都卡住,也就是相當於是一個人操作(有一個好處喲,就是不同地方的工作協調時,一個人操作,另外一個人可以看到對方在操作啥,就和看直播似的),此模式用於測試環境可以,生產環境不建議使用。

 

2. docker exec 

該命令的幫助文檔:

[root@tkwms-web wmsuser]# docker exec --help

Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container

Options:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a container
  -e, --env list             Set environment variables
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
  -w, --workdir string       Working directory inside the container

下面看一個案例:

[root@tkwms-web wmsuser]# docker exec -it 8c9dc1aaccad /bin/bash

A. 退出指令可以是exit,也可以是ctrl+p+q
B. 效果和docker attach類似。但是不存在docker attach的安全問題。

 

3. ssh方式

這里需要說明的是,運行的容器里面要有sshd服務,只有這樣,才可以在遠程的ssh客戶端能夠登陸上去。和普通的ssh使用方式一樣。

 

4. nsenter命令方式

A. 這個nsenter是第三方的應用,需要自己下載安裝。 wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz。 如何安裝,就不說了,解壓后自己一看就知道。

B. 獲取要登陸的容器的主進程PID   docker inspect -f {{.State.PID}} containerID

[root@tkwms-web util-linux-2.24]# docker inspect -f {{.State.Pid}} 886f31e4d385
    11625

C. 然后按照下面的指令進行登陸運行的容器

nsenter --target 11625 --mount --uts --ipc --net --pid

案例如下: 

[root@tkwms-web ~]# nsenter --target 11625 --mount --uts --ipc --net --pid
mesg: ttyname failed: No such file or directory
root@login:/# ls
bin  boot  dev  docker-java-home  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@login:/#

 

 

綜上所述,建議使用docker exec指令,最簡單。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM