kerfile CMD執行多條命令且需要支援環境變數

2022-08-22 19:35:17 字數 3920 閱讀 7899

1樓:折柳成萌

執行時機不太一樣。

run是在build時執行的,先於cmd和entrypoint。build完成了,run也執行完成後,再執行cmd或者entrypoint。

entrypoint和cmd的不同點在於執行docker run時引數傳遞方式,cmd指定的命令可以被docker run傳遞的命令覆蓋,例如,如果用cmd指定:

...cmd ["echo"]

然後執行

docker run container_name echo foo

那麼cmd裡指定的echo會被新指定的echo覆蓋,所以最終相當於執行echo foo,所以最終列印出的結果就是:

foo而entrypoint會把容器名後面的所有內容都當成引數傳遞給其指定的命令(不會對命令覆蓋),比如:

...entrypoint ["echo"]

然後執行

docker run container_name echo foo

則container_name後面的echo foo都作為引數傳遞給entrypoing裡指定的echo命令了,所以相當於執行了

echo "echo foo"

最終列印出的結果就是:

echo foo

另外,在dockerfile中,entrypoint指定的引數比執行docker run時指定的引數更靠前,比如:

...entrypoint ["echo", "foo"]

執行docker run container_name bar

相當於執行了:

echo foo bar

列印出的結果就是:

foo bar

dockerfile中只能指定一個entrypoint,如果指定了很多,只有最後一個有效。

執行docker run命令時,也可以新增-entrypoint引數,會把指定的引數繼續傳遞給entrypoint,例如:

...entrypoint ["echo","foo"]

然後執行:

docker run container_name bar #注意沒有echo

那麼,就相當於執行了echo foo bar,最終結果就是

foo bar

一個執行中的docker容器怎麼修改執行run命令時的環境變數

2樓:折柳成萌

你好,操作命令如下:

docker會在隔離的容器中執行程序。當執行docker run命令時,docker會啟動一個程序,併為這個程序分配其獨佔的檔案系統、網路資源和以此程序為根程序的程序組。在容器啟動時,映象可能已經定義了要執行的二進位制檔案、暴露的網路埠等,但是使用者可以通過docker run命令重新定義(譯者注:

docker run可以控制一個容器執行時的行為,它可以覆蓋docker build在構建映象時的一些預設配置),這也是為什麼run命令相比於其它命令有如此多的引數的原因。

命令格式

最基本的docker run命令的格式如下:

$ sudo docker run [options] image[:tag] [command] [arg...]

如果需要檢視[options]的詳細使用說明,請參考docker關於options的章節。這裡僅簡要介紹run所使用到的引數。options總起來說可以分為兩類:

設定執行方式:

決定容器的執行方式,前臺執行還是後臺執行;

設定containerid;

設定網路引數;

設定容器的cpu和記憶體引數;

- 設定許可權和lxc引數;

設定映象的預設資源,也就是說使用者可以使用該命令來覆蓋在映象構建時的一些預設配置。

docker run [options]可以讓使用者完全控制容器的生命週期,並允許使用者覆蓋執行docker build時所設定的引數,甚至也可以修改本身由docker所控制的核心級引數。

operator exclusive options

當執行docker run時可以設定以下引數:

detached vs foreground

detached (-d)

- foreground

container identification

name (--name)

- pid equivalent

ipc setting

network settings

clean up (--rm)

runtime constraints on cpu and memory

runtime privilege, linux capabilities, and lxc configuration

接下來我們依次進行介紹。

detached vs foreground

當我們啟動一個容器時,首先需要確定這個容器是執行在前臺還是執行在後臺。

-d=false: detached mode: run container in the background, print new container id

detached (-d)

如果在docker run後面追加-d=true或者-d,那麼容器將會執行在後臺模式。此時所有i/o資料只能通過網路資源或者共享卷組來進行互動。因為容器不再監聽你執行docker run的這個終端命令列視窗。

但你可以通過執行docker attach來重新附著到該容器的回話中。需要注意的是,容器執行在後臺模式下,是不能使用--rm選項的。

如何實現多個docker容器同時執行一條命令

3樓:匿名使用者

使用dockerfile或者docker-compose去執行自己寫的shell檔案。辦法暫時只有這一個

cmd 如何並行執行多條命令?

4樓:桃色奶糖

寫一個批處理指令碼(bat)

先在文字文件(txt)中寫下多條命令(一條命令一行),然後更改這個文字文件的字尾.txt為.bat

然後開啟這個檔案就行了

5樓:

寫一個批處理指令碼吧(bat)

cmd一行執行多條語句

6樓:

可以在bat檔案中寫入如下類似的**

@echo off

y:if exist backup.bak (if exist backup1.bak1 (del backup1.bak1

ren backup.bak backup1.bakren backup2.bak backup2.bak1exit

)if exist backup2.bak1 (del backup2.bak1

ren backup.bak backup2.bakren backup3.bak backup3.bak1exit))

@echo on

注意一定要使用echo off和echo on,因為這兩個可以讓系統對期間的**進行整塊操作

還有就是需要主要,if判斷的括號一定要寫在if的這行中。

7樓:

這兩個命令寫在一行執行是不行的。

你可以寫批檔案.bat,再執行.bat。

理論上,兩個命令,可以用 && 聯結,但未必正確工作。例如:

cmd /k "echo 12345" && echo abcde後一句在exit shell 後才執行, 不是你要的。

8樓:蠻蠻工作室

沒錯,寫成bat再呼叫即可,一行2條命令是不被支援的.

樓上說的 && 只能是字串連線,而不是命令連線

9樓:734121932韓

cmd /c rd /s /q c:\users\yao\desktop\qq & md c:\users\yao\desktop\qq

求「執行」裡的命令,求一個「執行」裡的命令

樓主說的應該是一鍵清垃圾.樓上已經給出檔案內容 chkdsk 命令列 它是檢查磁碟有沒有問題的一個工具。檢測後也可以修復 98好象不可以 類似於scandisk 用法 chkdsk volume path filename f v r x i c l size volume 指定驅動器 後面跟一個冒...

windows如何執行lsusb命令

adb devices 開始 執行 lususb linux 命令 lsusb 出來的東西,有人幫我解釋一下嗎?插入usb滑鼠後執行lsusb的輸出內容如下 bus 005 device 001 id 0000 0000 bus 001 device 001 id 0000 0000 bus 004...

C 呼叫exe檔案執行命令

include int main c 可以簡單地用 c 語言裡的 system 命令 開啟外部的exe可執行檔案,並帶命令列引數。例如,要調的外部可執行檔案是 prog2.exe,prog2.exe 的輸入引數 在 資料檔案 a.txt 裡,輸出檔案 為 b.txt 那麼 呼叫 方法 是 syste...