docker進(jìn)入容器運(yùn)行命令的使用及說(shuō)明
前言
Docker是一種流行的容器化平臺(tái),它能夠快速構(gòu)建、交付和運(yùn)行應(yīng)用程序。在使用Docker時(shí),我們經(jīng)常需要進(jìn)入容器進(jìn)行調(diào)試、管理和運(yùn)行命令等操作。
進(jìn)入 docker 容器需要執(zhí)行以下步驟:打開(kāi)終端窗口。使用 docker ps 命令查看正在運(yùn)行的容器。使用 docker exec -it /bin/bash 命令進(jìn)入容器,在容器內(nèi)執(zhí)行命令,使用 exit 命令退出容器。

一、使用docker exec進(jìn)入Docker容器
進(jìn)入 Docker 容器的步驟很簡(jiǎn)單,只需一條命令即可完成:
要在Docker容器中運(yùn)行命令,您可以使用docker exec命令。這里是一個(gè)基本的例子:
docker exec -it <container_id_or_name> <command>
其中<container_id_or_name>是您想要運(yùn)行命令的容器的ID或名稱,<command>是您想要執(zhí)行的命令。
例如,如果您想要在名為mycontainer的容器中執(zhí)行bash shell,您可以使用:
docker exec -it mycontainer bash
如果您想要在容器中運(yùn)行一個(gè)不需要交互的命令,比如查看容器中的某個(gè)文件,您可以直接執(zhí)行:
docker exec mycontainer cat /path/to/file
這將在mycontainer容器中執(zhí)行cat /path/to/file命令,并將結(jié)果直接輸出到您的終端。
其他命令提示說(shuō)明:
識(shí)別容器名稱:使用以下命令查看正在運(yùn)行的容器列表:
docker ps
這將輸出容器名稱、鏡像名稱、啟動(dòng)時(shí)間等信息。
執(zhí)行 exec 命令:使用 docker exec 命令進(jìn)入容器。例如,要進(jìn)入名為 "my-container" 的容器,可以使用以下命令:
docker exec -it my-container /bin/bash
- -i 選項(xiàng)表示在容器中打開(kāi)一個(gè)交互式會(huì)話。
- -t 選項(xiàng)表示為會(huì)話分配一個(gè)偽tty。
- /bin/bash 命令:/bin/bash 命令在容器中啟動(dòng)一個(gè) bash 會(huì)話。
- 提示符:成功進(jìn)入容器后,您將在命令提示符中看到 root@。這表示您現(xiàn)在已作為 root 用戶登錄到容器中。
- 執(zhí)行命令:您現(xiàn)在可以在容器內(nèi)執(zhí)行命令,就像在普通 Linux 系統(tǒng)中一樣。
- 退出容器:要退出容器,只需鍵入 exit 命令即可。
二、使用docker attach進(jìn)入Docker容器
接下來(lái)我們創(chuàng)建一個(gè)守護(hù)態(tài)的Docker容器,然后使用docker attach命令進(jìn)入該容器。
$ sudo docker run -itd ubuntu:xx.xx /bin/bash
然后我們使用docker ps查看到該容器信息,接下來(lái)就使用docker attach進(jìn)入該容器
$ sudo docker attach container_id
可以看到我們已經(jīng)進(jìn)入到該容器中了。但是,使用該命令有一個(gè)問(wèn)題,當(dāng)多個(gè)窗口同時(shí)使用該命令進(jìn)入該容器時(shí),所有的窗口都會(huì)同步顯示。如果有一個(gè)窗口阻塞了,那么其他窗口也無(wú)法再進(jìn)行操作。
因?yàn)檫@個(gè)原因,所以docker attach命令不太適合于生產(chǎn)環(huán)境,平時(shí)自己開(kāi)發(fā)應(yīng)用時(shí)可以使用該命令。
通常情況下,需要查看docker容器內(nèi)stdout,會(huì)使用命令 docker attach container_id 來(lái)查看容器輸出.但是不知道如何退出,使用Ctrl+c直接卡死。正確的退出方式應(yīng)該用一個(gè)組合鍵 Ctrl+p Ctrl+q 然后容器會(huì)關(guān)閉,界面也可恢復(fù)。
三、使用nsenter進(jìn)入Docker容器。
nsenter是用來(lái)進(jìn)入容器內(nèi)部的一個(gè)命令,它的優(yōu)勢(shì)之處在于可以自己選擇加載容器的哪些namespaces
可以直接選擇yum安裝
$ yum install util-linux -y
也可以選擇源碼安裝
系統(tǒng)默認(rèn)將我們需要的nsenter安裝到主機(jī)中
如果沒(méi)有安裝的話,按下面步驟安裝即可(注意是主機(jī)而非容器或鏡像)
具體的安裝命令如下:
$ 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
安裝好nsenter之后可以查看一下該命令的使用。先使用--help查看一下nsenter的幫助信息
?$ nsenter --help 用法: nsenter [options] <program> [<argument>...] ? Run a program with namespaces of other processes. ? 選項(xiàng): -t, --target <pid> 要獲取名字空間的目標(biāo)進(jìn)程 -m, --mount[=<file>] enter mount namespace -u, --uts[=<file>] enter UTS namespace (hostname etc) -i, --ipc[=<file>] enter System V IPC namespace -n, --net[=<file>] enter network namespace -p, --pid[=<file>] enter pid namespace -U, --user[=<file>] enter user namespace -S, --setuid <uid> set uid in entered namespace -G, --setgid <gid> set gid in entered namespace --preserve-credentials do not touch uids or gids -r, --root[=<dir>] set the root directory -w, --wd[=<dir>] set the working directory -F, --no-fork 執(zhí)行 <程序> 前不 fork -Z, --follow-context set SELinux context according to --target PID ? -h, --help 顯示此幫助并退出 -V, --version 輸出版本信息并退出
可以看到選項(xiàng)很多,但是大致上都是進(jìn)入某個(gè)namespace
--mount參數(shù)是進(jìn)去到mount namespace中 --uts參數(shù)是進(jìn)入到uts namespace中 --ipc參數(shù)是進(jìn)入到System V IPC namaspace中 --net參數(shù)是進(jìn)入到network namespace中 --pid參數(shù)是進(jìn)入到pid namespace中 --user參數(shù)是進(jìn)入到user namespace中
nsenter可以訪問(wèn)另一個(gè)進(jìn)程的名稱空間。所以為了連接到某個(gè)容器我們還需要獲取該容器的第一個(gè)進(jìn)程的PID??梢允褂胐ocker inspect命令來(lái)獲取該P(yáng)ID。
四、docker inspect命令使用
$ sudo docker inspect --help
inspect命令可以分層級(jí)顯示一個(gè)鏡像或容器的信息。使用docker ps 查看我們當(dāng)前有一個(gè)正在運(yùn)行的容器,可以使用docker inspect來(lái)查看該容器的詳細(xì)信息。
$ sudo docker inspect container_id
如果要顯示該容器第一個(gè)進(jìn)程的PID可以使用如下方式
$ sudo docker inspect -f {{.State.Pid}} container_id在獲取到該進(jìn)程PID之后我們就可以使用nsenter命令訪問(wèn)該容器了。
$ sudo nsenter --target PID --mount --uts --ipc --net --pid
五、docker inspect : 獲取容器/鏡像的元數(shù)據(jù)。
語(yǔ)法
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS說(shuō)明:
- -f :指定返回值的模板文件。
- -s :顯示總的文件大小。
- --type :為指定類型返回JSON。
實(shí)例
獲取鏡像mysql:5.6的元信息。(展示部分信息)
命令:
xx@xx:~$ docker inspect mysql:5.6
[
{
"Id": "xx",
"RepoTags": [
"mysql:5.6"
],
"RepoDigests": [],
"Parent": "",
"Comment": "",
"Created": "xx",
"Container": "xx",
"ContainerConfig": {
"Hostname": "xx",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3306/tcp": {}
},
...獲取正在運(yùn)行的容器mysql02的 IP。
xx@xx:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql02Docker 常用的命令集
docker version: 顯示Docker版本docker info: 顯示Docker信息docker attach: 掛載正在后臺(tái)運(yùn)行的容器到前臺(tái)docker run: 在一個(gè)新的容器中執(zhí)行命令 (Ctrl+p CTRL+q 退出至后臺(tái)運(yùn)行)docker ps: 列出當(dāng)前容器docker images: 列出當(dāng)前鏡像docker logs: 顯示容器的日志docker inspect: 顯示鏡像或容器的詳細(xì)信息docker stop: 停止運(yùn)行中的容器 (Ctrl+d 強(qiáng)制退出, exited (0)表示正常退出)docker kill: 殺掉一個(gè)運(yùn)行中的容器 (exited (-1)表示異常退出)docker start: 重啟停止的容器docker restart: 重啟運(yùn)行中的容器docker cp: 拷貝容器中的文件docker rm: 刪除容器docker top: 查看容器輸出docker events: 實(shí)時(shí)監(jiān)聽(tīng)容器的事件docker history: 顯示鏡像的歷史記錄docker pull: 從遠(yuǎn)程拉取鏡像docker diff: 列出鏡像中文件和目錄的變化docker commit: 將容器打包成新的鏡像docker build: 使用Dockerfile構(gòu)建新鏡像docker tag: 為鏡像加上標(biāo)簽docker load: 將tar壓縮文件保存為imagedocker export: 把容器系統(tǒng)文件打包并導(dǎo)出來(lái),方便分發(fā)給其他場(chǎng)景使用
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用docker部署若依前后端分離項(xiàng)目全過(guò)程
部署前端項(xiàng)目Docker變得越來(lái)越流行,它可以輕便靈活地隔離環(huán)境,進(jìn)行擴(kuò)容,運(yùn)維管理,這篇文章主要介紹了使用docker部署若依前后端分離項(xiàng)目的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-12-12
Docker本地部署Firefox火狐瀏覽器并遠(yuǎn)程訪問(wèn)的流程
在Docker中打開(kāi)Firefox意味著我們將在一個(gè)Docker容器中運(yùn)行Firefox瀏覽器,下面是一個(gè)簡(jiǎn)單的示例,演示如何在Docker中打開(kāi)Firefox,本次實(shí)踐部署環(huán)境為本地環(huán)境,感興趣的朋友一起看看吧2023-11-11
詳解掛載運(yùn)行的docker容器中如何掛載文件系統(tǒng)
這篇文章主要給大家介紹了如何在掛載運(yùn)行中的docker容器中掛載文件系統(tǒng),文中通過(guò)一步步的實(shí)踐過(guò)程介紹的很詳細(xì),相信對(duì)有需要的朋友們來(lái)說(shuō)具有一定的參考借鑒價(jià)值,感興趣的朋友們下面來(lái)一起看看吧。2016-12-12
Docker Registry 私有倉(cāng)庫(kù)搭建詳細(xì)步驟
這篇文章主要介紹了Docker Registry 私有倉(cāng)庫(kù)搭建的相關(guān)資料,需要的朋友可以參考下2016-10-10
如何修改 docker 容器的啟動(dòng)參數(shù)
工作中我們經(jīng)常遇到docker容器運(yùn)行一段時(shí)間后,因?yàn)楦鞣N原因需要調(diào)整啟動(dòng)參數(shù)的情況,這篇文章主要介紹了如何修改 docker 容器的啟動(dòng)參數(shù),需要的朋友可以參考下2023-09-09

