天天看點

主控端通路操作docker方式

一、ssh通路

啟動的時候需要把22端口隐射出來

docker run -t -i -d -p 8091:8080 -p 9527:22 --name tomcat4 tomcat-bases /bin/bash

二、nsenter

用來通路另一個程序的名字空間。nsenter要正常工作需要有root權限

為了連接配接到容器,你還需要找到容器的第一個程序的PID。

docker inspect --format "` `.`State`.`Pid `" <container-id>

通過這個PID,你就可以連接配接到這個容器:

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

三、Docker exec與Docker attach

1、Docker attach

Docker attach可以attach到一個已經運作的容器的stdin,然後進行指令執行的動作。 但是需要注意的是,如果從這個stdin中exit,會導緻容器的停止。

使用方法 docker attach 容器ID

2、Docker exec

關于-i、-t參數

可以看出隻用-i時,由于沒有配置設定僞終端,看起來像pipe執行一樣。但是執行結果、指令 傳回值都可以正确擷取。使用-it時,則和我們平常操作console界面類似。而且也不會像attach方式因為退出,導緻 整個容器退出。 這種方式可以替代ssh或者nsenter、nsinit方式,在容器内進行操作。如果隻使用-t參數,則可以看到一個console視窗,但是執行指令會發現由于沒有獲得stdin 的輸出,無法看到指令執行情況。

使用方法:docker exec -ti  容器ID BASH指令

四、腳本執行個體

#!/bin/sh

CONTAINER_NAME=$1

if [ ! -n "$CONTAINER_NAME" ];then

    echo "請輸入即将要登入的容器名稱,例如要登入容器xiaoniuapp-api,請輸入:./connect.sh xiaoniuapp-api"

else

    CONTAINER_ID=`docker ps -a | grep $CONTAINER_NAME | awk '{print $1}'`

    echo "容器ID:"$CONTAINER_ID

    CONTAINER_PID=`docker inspect --format "` `.`State`.`Pid `" $CONTAINER_ID`

    echo "容器PID:"$CONTAINER_PID

    echo "開始連接配接容器。。。"