【Docker學習】深入研究命令docker exec

使用docker的過程中,我們會有多重情況需要訪問容器。比如希望直接進入MySql容器執行命令,或是希望查看容器環境,進行某些操作或訪問。這時就會用到這個命令:docker exec。

命令:

docker container exec

描述:

在運行的容器中執行命令。

您使用 docker exec 指定的命令只會在容器的首要進程(PID 1)運行時執行,如果容器重啟,該命令不會被重新啟動。

該命令在容器的默認工作目錄中運行。

該命令必須是一個可執行程序。鏈式命令或引號內的命令不起作用

這樣是有效的:docker exec -it my_container sh -c “echo a && echo b”?

這樣是無效的:docker exec -it my_container “echo a && echo b”

用法:

docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

別名:

docker exec(docker的一些命令可以簡寫,docker exec和docker container exec是等價的)

選項:

選項描述
-d, –detach分離模式:在后臺運行命令
–detach-keys覆蓋用于分離容器的鍵序列
-e, –envAPI 1.25+ 設置環境變量
–env-file讀取的環境變量文件
-i, –interactive即使未附著也保持 STDIN 打開
–privileged為命令提供擴展權限
-t, –tty分配一個偽TTY
-u, –user用戶名或用戶ID(格式:<name|uid>[:<group|gid>])
-w, –workdir容器內的工作目錄

示例1:選項-d, –detach、-i, –interactive、-t, –tty

-d相當于后臺運行,使用這個選項,不影響終端的進一步操作。-i和-t兩個選項通常一起使用,在【Docker學習】docker run之黃金搭檔-it選項 – 筑天兄的清凈小站 (skycreator.top)有詳細介紹。

關于這三個選項,官方給出的例子挺好。我就直接使用官方例子,在我的阿里云上操作,借花獻佛了。

使用exec,首先要確保有一個運行著的容器。使用以下命令創建并啟動一個名為mycontainer的基于alpine的容器,該容器以sh shell作為其主進程。其中,-d選項(–detach的簡寫形式)會讓容器以后臺運行的方式啟動,即分離模式,并附加一個偽TTY(-t)。-i選項設置為保持STDIN附加(-i),這可以防止sh進程立即退出。

docker run --name mycontainer -d -i -t alpine /bin/sh

執行之后,使用ps來查看一下:

在這之后,我們使用-d選項,在運行的mycontainer容器中運行一個命令touch /tmp/execWorks。該命令在容器的根目錄tmp下創建execWorks文件。

docker exec -d mycontainer touch /tmp/execWorks

這條命令執行之后沒效果,需要進入容器的sh下查看。使用-it選項(-i加-t選項),直接與容器交互。

docker exec -it mycontainer sh

在容器的終端進入tmp文件夾查看,發現execWorks被創建。

示例2:選項–detach-keys

這個選項說起來比較復雜,在【Docker學習】docker start深入研究 – 筑天兄的清凈小站 (skycreator.top)中有詳細講解,大家可以對照著來學習。

示例3:選項-e, –env和選項–env-file

這兩個選項都是設置環境變量的,前者是直接設置,后者是通過一個文件設置。在【Docker學習】docker run的環境變量相關選項(-e, –env, –env-file) – 筑天兄的清凈小站 (skycreator.top)中有詳細講解,這個不再贅述了。

示例4:–privileged

這個選項用于提升容器權限,它為容器提供了以下功能:

  • 啟用所有Linux內核功能
  • 禁用默認的seccomp配置文件
  • 禁用默認的AppArmor配置文件?
  • 禁用SELinux進程標簽?
  • 授予訪問所有主機設備的權限?
  • 使/sys變為可讀寫?
  • 使cgroups掛載變為可讀寫?

換句話說,容器幾乎可以做主機能做的任何事情。這個標志的存在是為了允許特殊用途,比如在Docker中運行Docker。

這個選項很強大,未來詳細講解,這里只簡要介紹。

我們使用剛才的容器作測試,進入容器的終端,執行命令

docker exec -it mycontainer sh

在終端輸入以下命令,將一個tmpfs文件系統掛載到/mnt目錄,允許在這個目錄下存儲臨時數據,這些數據在系統重啟后不會保留。

/ # mount -t tmpfs none /mnt

這個命令具體作用如下:

  • mount:這是用來掛載文件系統的命令。
  • -t tmpfs:這指定了要掛載的文件系統類型為tmpfs,這是一種基于內存的文件系統,也稱為臨時文件系統。數據存儲在內存中,而不是寫入磁盤,這意味著它的讀寫速度非常快,但數據在系統重啟后會丟失。
  • none:這里指定了設備的源,none表示沒有實際的設備或文件名與tmpfs關聯。因為tmpfs不依賴于具體的設備,所以使用none作為占位符。
  • /mnt:這是掛載點,即文件系統在目錄樹中的位置。在這個例子中,tmpfs將被掛載到/mnt目錄下。

看看運行結果。顯示permission denied,說明沒有權限。默認情況下,Docker會丟棄大多數可能危險的核心功能,包括CAP_SYS_ADMIN(掛載文件系統所必需的)。

那么我們執行–privileged選項看看。

居然沒有效果!!!好吧,看來只能放大招了。

官網講解–privileged選項時,也講解了docker run 的–cap-add選項,該選項可以為容器添加linux功能。而SYS-ADMIN是linux系統管理必備的功能。因此我使用該選項,先給mycontainer加入這個功能。

docker run --cap-add SYS_ADMIN --name mycontainer -dit  alpine /bin/sh

執行之后,我嘗試進行掛載,這次成功了。通過df -h命令查看文件系統磁盤空間使用情況。可以看到最下面一行,文件系統是none的就是我進行的掛載。不過這么做也用不著–privileged選項了。

官網的例子使用的并不是alpine,而是ubuntu。通過對比–privileged使用與否的情況,可以看到ubuntu的/dev目錄發生了明顯的變化:

上面是不使用–privileged選項的/dev目錄。

上面是使用–privileged選項的/dev目錄。

可以明顯看出兩者的不同,說明使用–privileged選項,為/dev目錄增加了不少特性。

回過頭再來看alpine,使用不使用/dev的目錄是相同的。如下圖所示:

也就是說,alpine這個鏡像并沒有為–privileged選項預留功能。畢竟alpine是閹割版的linux系統,它的大小只有4m多。下面是幾個linux官方鏡像的大小對比。

另外,docker run的–cap-add選項,沒有加入到docker exec中,可能是因為這只能是創建時加入,運行中的容器是不能直接設置的。

示例5:-u, –user選項

這個選項用于以某個用戶身份進入容器。

還是使用alpine這個鏡像的mycontainer容器,進入容器的shell下,添加一個普通用戶zl

adduser zl

然后exit退出,重新使用docker exec進入,這次加入-u選項

docker exec -it -u zl  mycontainer sh

在shell中輸入id,查看當前用戶的信息

可以看出,當前用戶是zl,uid,gid和groups均顯示出來了。

示例6:-w, –workdir選項

該選項用于設置容器的工作目錄。不指定的情況下,工作目錄就是/,如下圖所示:

下面指定了工作目錄為/etc,使用pwd查看當前工作目錄,即是/etc。

關于alpine

Alpine是一個輕量級的Linux發行版,它基于musl libc和 BusyBox,旨在提供一個小巧、安全、簡單且高效的操作系統。Alpine特別適合用于容器和云環境,因為它的大小很小,啟動速度快,同時提供了一個包管理器工具apk,可以用來安裝、更新和管理軟件包。

在Docker等容器平臺中,Alpine經常被用作基礎鏡像,因為它可以創建出非常小的容器鏡像,這對于開發和部署都非常有利。由于它的體積小,Alpine在資源有限的場景下也非常受歡迎,比如在嵌入式設備或者需要快速部署的應用中。

Alpine?官網:https://www.alpinelinux.org/

Alpine?官方倉庫:https://github.com/alpinelinux

Alpine?官方鏡像:https://hub.docker.com/_/alpine/

Alpine?官方鏡像倉庫:https://github.com/gliderlabs/docker-alpine

關于–privileged

請謹慎使用–privileged標志。帶有–privileged的容器并不是一個安全沙箱化的進程。在此模式下的容器可以在主機上獲取root權限的shell并控制系統。

對于大多數用例來說,這個標志不應該是首選解決方案。如果您的容器需要提升的權限,您應該更愿意明確授予必要的權限,例如通過使用–cap-add添加單個內核功能。

關于df -h命令

在Linux和類Unix操作系統中,df -h是一個常用的命令,用于顯示文件系統的磁盤空間使用情況。df代表disk free,即磁盤空閑空間。-h選項表示human-readable,它會以更易于閱讀的格式顯示大小,例如將字節轉換為千字節、兆字節或吉字節,并附加適當的單位(K、M、G)。

df -h命令的輸出通常包括以下信息:

  • 文件系統的掛載點(Mounted on)
  • 文件系統的總大小(Size)
  • 已使用的空間大小(Used)
  • 可用的空閑空間(Avail)
  • 使用百分比(Use%)
  • 文件系統的標識(Filesystem)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15810.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15810.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ssm275寵物醫院管理系統+vue-手把手調試搭建

ssm275寵物醫院管理系統vue-手把手調試搭建 ssm275寵物醫院管理系統vue-手把手調試搭建

Jmeter預習第1天

Jmeter參數化&#xff08;重點&#xff09; 本質&#xff1a;使用參數的方式來替代腳本中的固定為測試數據 實現方式&#xff1a; 定義變量&#xff08;最基礎&#xff09; 文件定義的方式&#xff08;所有測試數據都是固定的情況下[死數據]&#xff0c;eg:注冊登錄&#xff0…

Linux -- 進程間通信的五種方式

IPC&#xff08;InterProcess Communication&#xff09;的方式通常有管道&#xff08;包括無名管道和命名管道&#xff09;、消息隊列、信號量、共享存儲、Socket、Streams等。其中Socket和Stream支持不同主機上的兩個進程IPC。 管道&#xff08;Pipes&#xff09;&#xff1a…

STM32中斷編程入門

文章目錄 一、 理論部分1.中斷系統2.中斷執行流程3.NVIC的基本結構4.EXTI介紹5.AFIO復用IO口 二、實驗目的&#xff1a;學習stm32中斷原理和開發編程方法。使用標準完成以下任務&#xff1a;&#xff08;一&#xff09;實驗一 開關控制LED的亮滅1.代碼部分2.運行結果 &#xff…

Qt | QFormLayout 類(表單布局)

01、上節回顧 Qt | QGridLayout 類(網格布局)02、簡介 1、QFormLayout 布局以兩列的形式列出其子項目, 2、QFormLayout 被分成兩列,左列是標簽(label)部分,通常由標簽 QLabel 組成,右列是由 字段(field)部分,通常是 QLineEdit 行編輯器,QSpinBox 旋轉框等部件,注意:…

【簡單易用,新人友好】一個輕量級生物信息學流程框架,從此解決99%的生物信息學流程搭建問題...

生物信息學數據分析流程的搭建是一項繁重而復雜的工作。隨著行業的發展&#xff0c;各種生信流程框架層出不窮&#xff0c;比如有: NextflowSnakemakeCWLWDL 各種標準&#xff0c;各種規則&#xff0c;令人眼花繚亂。選擇太多&#xff0c;往往令人無所適從。特別是新進入行業的…

小程序的深層了解

一:wxss的全局樣式和局部樣式 寫在文件上,第一個路徑會執行全局和局部自帶的wxss給wxml,會執行wxml,會執行json和js. 無論那個文件都會執行文件夾內的和外部的app.wxss,但是如果有一樣的屬性,則看屬性的權重,權重一樣,則設置局部樣式. 二:全局配置 wx:key"寫的是data內…

17.7K星開源產品分析平臺:Posthog

Posthog&#xff1a;開源洞察&#xff0c;產品優化的得力助手 - 精選真開源&#xff0c;釋放新價值。 概覽 PostHog是一個全面開源的平臺&#xff0c;旨在幫助團隊構建更好的產品。它提供了從產品分析到會話回放、功能標志和A/B測試等一系列工具&#xff0c;支持自托管&#x…

如何通過Nginx配置將請求轉發到conf.d目錄下的各個配置文件

目錄 如何通過Nginx配置將請求轉發到conf.d目錄下的各個配置文件1. 修改主配置文件 nginx.conf2. 在 conf.d 目錄中創建站點配置3. 設置站點根目錄和權限4. 檢查配置并重新加載Nginx總結 如何通過Nginx配置將請求轉發到conf.d目錄下的各個配置文件 在使用Nginx進行網站管理時&…

讀人工智能時代與人類未來筆記14_管控人工智能

1. 管控人工智能 1.1. 歷史上的戰場進一步推進到與數字網絡相連的所有地方 1.2. 數字程序現在控制著一個由眾多實體系統構成的龐大且仍在不斷增長的領域&#xff0c;而且越來越多的此類系統已實現網絡化 1.2.1. 在某些情況下甚至連門鎖和冰箱都實現了網絡化 1.2.2. 這催生出…

拋出異常時仍然需要記錄錯誤日志

場景&#xff1a;當service的方法執行拋出異常時&#xff0c;事務會發生回滾&#xff0c;導致無法記錄錯誤日志 解決&#xff1a;切面 其他&#xff1a;1.日志需要記錄日志標題&#xff0c;保存入參 2.失敗時會拋出異常&#xff1b;日志需要判斷執行是否成功&#xff0c;記錄…

2024年漢字小達人活動4個多月開賽:18道歷年選擇題和答案、解析

根據近年的安排&#xff0c;2024年第11屆漢字小達人比賽還有4個多月就啟動&#xff0c;那么孩子們如何利用這段時間有條不紊地備考呢&#xff1f;我的建議是兩手準備&#xff1a;①把小學1-5年級的語文課本上的知識點熟悉&#xff0c;重點是字、詞、成語、古詩。②把歷年真題刷…

聯想端游聯運SDK接入指南

1. 接入流程 本文檔主要介紹了 聯想PC游戲SDK接入流程、聯想游戲提供的功能、接入注意事項等。 1.1. 接入方式 1. 聯想游戲SDK2.1版本支持“賬號防沉迷支付”接入方式&#xff1b; a. 聯想提供賬號注冊、登錄等能力 b. 聯想提供防沉迷服務 c. 聯想提供游戲內支付 1.2. 對…

【學習筆記】計算機組成原理(八)

CPU 的結構和功能 文章目錄 CPU 的結構和功能8.1 CPU的結構8.1.1 CPU的功能8.1.2 CPU結構框圖8.1.3 CPU的寄存器8.1.4 控制單元CU和中斷系統 8.2 指令周期8.2.1 指令周期的基本概念8.2.2 指令周期的數據流 8.3 指令流水8.3.1 指令流水原理8.3.2 影響流水線性能的因素8.3.3 流水…

meinheld-gunicorn-flask VS uvicorn-gunicorn-fastapi 性能對比測試

本文會使用如下兩個項目&#xff1a;meinheld-gunicorn-flask 與 uvicorn-gunicorn-fastapi 前文有測過 Flask vs FastApi 性能對比測試&#xff0c;可能不夠有說服力&#xff0c;這次使用了號稱最快的wsgi或asgi服務器gunicorn來運行flask或fastapi。 上面meinheld-gunicorn…

數據庫-SQL性能分析

SQL執行頻率 慢查詢日志 慢查詢日志記錄了所有執行時間超過指定參數&#xff08;long_query_time&#xff0c;單位&#xff1a;秒&#xff0c;默認10秒&#xff09;的所有 SQL語句的日志。 MySQL的慢查詢日志默認沒有開啟&#xff0c;我們可以查看一下系統變量 slow_query_l…

html5 筆記02

目錄 01 svg的基本使用 02 svg繪圖 03 進程和線程 01 svg的基本使用 svg和canvas的區別: canvas: 1.canvas作為一個容器只有一個dom元素 ,內部元素無法使用dom操作 (canvas不能展開然后選擇不到 svg查看元素能選中因為是通過標簽控制的) 2.canvas 是配合js完成各種繪制效果 …

vue-route的路由配置中父組件沒有component怎么處理

概述 為了方便開發和維護&#xff0c;所以web前端的路由配置路徑和前端代碼文件路徑一般是一致的。但在實際開發中&#xff0c;項目可能會分很多級的菜單&#xff0c;由于很多菜單只有葉子菜單是真正的頁面。而中間菜單項只是一個路由配置。 為了正確路由到底層的功能頁面&…

指紋識別概念解析

目錄 1. 指紋是物證之首 1.1 起源于中國 1.2 發展于歐洲 1.3 流行于全世界 2. 指紋圖像 3. 指紋特征 4. 指紋注冊 5. 指紋驗證 6. 指紋辨識 1. 指紋是物證之首 指紋識別技術起源于中國、發展于歐洲、流行于全世界。自20世紀以來&#xff0c;指紋在偵破刑事案件、解決訴…

水泥超低排平臺哪家好?

隨著環保政策的加強和綠色發展理念的深入人心&#xff0c;水泥行業的超低排放改造已成為行業發展的新趨勢。選擇一個合適的水泥超低排平臺對于確保改造效果和實現企業的可持續發展至關重要。朗觀視覺小編將從多個角度出發&#xff0c;為您提供一份綜合評估與選擇攻略&#xff0…