宿主機訪問操作docker方式

2021-09-20 22:49:41 字數 1281 閱讀 8719

一、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...