一、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 `"
通過這個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
else
container_id=`docker ps -a | grep $container_name | awk ''`
echo "容器id:"$container_id
container_pid=`docker inspect --format "` `.`state`.`pid `" $container_id`
echo "容器pid:"$container_pid
echo "開始連線容器。。。"
nsenter --target $container_pid --mount --uts --ipc --net --pid
fi
docker訪問宿主機MySQL
docker內部訪問宿主及mysql 有時mysql安裝在宿主機中,而服務在docker容器中,此時可以通過通過以下兩張方式訪問 方法一啟動docker時使用 net host net host這個引數,讓容器執行在宿主機相同的網路 此時可以通過127.0.0.1直接連線mysql 方法二使用doc...
docker 容器訪問宿主機的解決方式
基於本地docker的自研及使用需要,希望docker容器的服務能連線到宿主機提供的服務。網路上查閱了大量的資料,基本的解決辦法是通過手動查閱ip的方式進行,但docker宿主機的ip是會動態改變的,並不能保證永久不變。因此此舉是行不通。使用 net host 的網路模式。但實踐,發現win環境下,...
docker宿主機訪問docker容器服務失敗
原因 因為docker的虛擬ip網段是172.17.與區域網的ip網段172.17衝突了,所以有兩種方式 解決方法 一 修改docker網絡卡資訊,將網段改為與區域網不同的即可 linux修改方法 第一步 刪除原有配置 sudo service docker stop sudo ip link se...