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

一、使用docker exec進(jìn)入Docker容器
進(jìn)入 Docker 容器的步驟很簡單,只需一條命令即可完成:
要在Docker容器中運(yùn)行命令,您可以使用docker exec命令。這里是一個基本的例子:
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)行一個不需要交互的命令,比如查看容器中的某個文件,您可以直接執(zhí)行:
docker exec mycontainer cat /path/to/file
這將在mycontainer容器中執(zhí)行cat /path/to/file命令,并將結(jié)果直接輸出到您的終端。
其他命令提示說明:
識別容器名稱:使用以下命令查看正在運(yùn)行的容器列表:
docker ps
這將輸出容器名稱、鏡像名稱、啟動時間等信息。
執(zhí)行 exec 命令:使用 docker exec 命令進(jìn)入容器。例如,要進(jìn)入名為 "my-container" 的容器,可以使用以下命令:
docker exec -it my-container /bin/bash
- -i 選項(xiàng)表示在容器中打開一個交互式會話。
- -t 選項(xiàng)表示為會話分配一個偽tty。
- /bin/bash 命令:/bin/bash 命令在容器中啟動一個 bash 會話。
- 提示符:成功進(jìn)入容器后,您將在命令提示符中看到 root@。這表示您現(xiàn)在已作為 root 用戶登錄到容器中。
- 執(zhí)行命令:您現(xiàn)在可以在容器內(nèi)執(zhí)行命令,就像在普通 Linux 系統(tǒng)中一樣。
- 退出容器:要退出容器,只需鍵入 exit 命令即可。
二、使用docker attach進(jìn)入Docker容器
接下來我們創(chuàng)建一個守護(hù)態(tài)的Docker容器,然后使用docker attach命令進(jìn)入該容器。
$ sudo docker run -itd ubuntu:xx.xx /bin/bash
然后我們使用docker ps查看到該容器信息,接下來就使用docker attach進(jìn)入該容器
$ sudo docker attach container_id
可以看到我們已經(jīng)進(jìn)入到該容器中了。但是,使用該命令有一個問題,當(dāng)多個窗口同時使用該命令進(jìn)入該容器時,所有的窗口都會同步顯示。如果有一個窗口阻塞了,那么其他窗口也無法再進(jìn)行操作。
因?yàn)檫@個原因,所以docker attach命令不太適合于生產(chǎn)環(huán)境,平時自己開發(fā)應(yīng)用時可以使用該命令。
通常情況下,需要查看docker容器內(nèi)stdout,會使用命令 docker attach container_id 來查看容器輸出.但是不知道如何退出,使用Ctrl+c直接卡死。正確的退出方式應(yīng)該用一個組合鍵 Ctrl+p Ctrl+q 然后容器會關(guān)閉,界面也可恢復(fù)。
三、使用nsenter進(jìn)入Docker容器。
nsenter是用來進(jìn)入容器內(nèi)部的一個命令,它的優(yōu)勢之處在于可以自己選擇加載容器的哪些namespaces
可以直接選擇yum安裝
$ yum install util-linux -y
也可以選擇源碼安裝
系統(tǒng)默認(rèn)將我們需要的nsenter安裝到主機(jī)中
如果沒有安裝的話,按下面步驟安裝即可(注意是主機(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)入某個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可以訪問另一個進(jìn)程的名稱空間。所以為了連接到某個容器我們還需要獲取該容器的第一個進(jìn)程的PID??梢允褂胐ocker inspect命令來獲取該P(yáng)ID。
四、docker inspect命令使用
$ sudo docker inspect --help
inspect命令可以分層級顯示一個鏡像或容器的信息。使用docker ps 查看我們當(dāng)前有一個正在運(yùn)行的容器,可以使用docker inspect來查看該容器的詳細(xì)信息。
$ sudo docker inspect container_id
如果要顯示該容器第一個進(jìn)程的PID可以使用如下方式
$ sudo docker inspect -f {{.State.Pid}} container_id在獲取到該進(jìn)程PID之后我們就可以使用nsenter命令訪問該容器了。
$ sudo nsenter --target PID --mount --uts --ipc --net --pid
五、docker inspect : 獲取容器/鏡像的元數(shù)據(jù)。
語法
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS說明:
- -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: 掛載正在后臺運(yùn)行的容器到前臺docker run: 在一個新的容器中執(zhí)行命令 (Ctrl+p CTRL+q 退出至后臺運(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: 殺掉一個運(yùn)行中的容器 (exited (-1)表示異常退出)docker start: 重啟停止的容器docker restart: 重啟運(yùn)行中的容器docker cp: 拷貝容器中的文件docker rm: 刪除容器docker top: 查看容器輸出docker events: 實(shí)時監(jiān)聽容器的事件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)出來,方便分發(fā)給其他場景使用
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Docker部署GitLab環(huán)境搭建的方法步驟
這篇文章主要介紹了基于Docker部署GitLab環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Docker build創(chuàng)建鏡像命令示例實(shí)踐
本文講解Dockerfile的核心概念、基礎(chǔ)指令、構(gòu)建流程及優(yōu)化技巧,涵蓋鏡像層結(jié)構(gòu)、構(gòu)建上下文、常用命令參數(shù),強(qiáng)調(diào)多階段構(gòu)建、輕量鏡像等最佳實(shí)踐,感興趣的朋友跟隨小編一起看看吧2025-08-08
再見 Docker如何5分鐘轉(zhuǎn)型 containerd
這篇文章主要介紹了再見 Docker如何5分鐘轉(zhuǎn)型 containerd,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
淺談關(guān)于Docker容器互聯(lián)的初步實(shí)踐
這篇文章主要介紹了淺談關(guān)于Docker容器互聯(lián)的初步實(shí)踐,本文介紹了使用網(wǎng)橋(bridge)來對容器進(jìn)行互聯(lián),非常具有實(shí)用價值,需要的朋友可以參考下2018-10-10
使用docker-compose創(chuàng)建網(wǎng)橋過程
文章介紹了通過docker-compose創(chuàng)建網(wǎng)橋(使用hello-world鏡像),容器退出后網(wǎng)橋仍存在;刪除網(wǎng)橋時使用docker-composedown,網(wǎng)橋消失但其他容器可能仍依賴其網(wǎng)絡(luò)2025-08-08

