entrypoint和cmd的區別 和用法

2021-09-29 16:35:50 字數 1924 閱讀 8654

在寫dockerfile時, entrypoint或者cmd命令會自動覆蓋之前的entrypoint或者cmd命令.

如下,覆蓋命令為/bin/bash

docker run demo /bin/bash
和cmd類似, 預設的entrypoint在docker run時也可以被覆蓋.

docker run --entrypoint demo
區別在於:cmd的預設程式比entrypoint更容易被覆蓋

from centos

cmd["ps","aux"]

docker run centos:cmdtest

user pid %cpu %mem vsz rss tty stat start time command

root 1 4.0 0.0 41812 1520 ? rs 12:19 0:00 /usr/bin/ps aux

如果改變引數命令為:-elf

docker run centos:cmdtest -elf

docker: error response from daemon: oci runtime create failed: container_linux.go:346: starting container process caused "exec: \"-elf\": executable file not found in $path": unknown.

必須cmd完全覆蓋

docker run centos:cmdtest ps -elf

f s uid pid ppid c pri ni addr sz wchan stime tty time cmd

4 r root 1 0 0 80 0 - 10453 - 12:20 ? 00:00:00 ps -elf

from centos

entrypoint ["ps"]

cmd ["aux"]

docker run centos:cmdtest

user pid %cpu %mem vsz rss tty stat start time command

root 1 0.0 0.0 41812 1516 ? rs 12:27 0:00 ps aux

如果改變引數命令為:-elf

docker run centos:cmdtest -elf

f s uid pid ppid c pri ni addr sz wchan stime tty time cmd

4 r root 1 0 1 80 0 - 10453 - 12:28 ? 00:00:00 ps -elf

當指定了entrypoint後,cmd的含義就發生了改變,不再是直接的執行其命令,而是將cmd的內容作為引數傳給entrypoint指令,換句話說實際執行時,將變為:

""
entrypoint指定預設的執行命令, cmd指定預設的執行引數

因為entrypoint和cmd同時存在時, docker會把cmd的命令拼接到entrypoint命令之後

參考:

Docker CMD和ENTRYPOINT指令區別

cmd用於容器啟動後預設執行的命令,支援三種格式,多條cmd僅最後一條生效。cmd param1 param2 為 entrypoint 提供額外的引數,此時 entrypoint 必須使用 exec 格式。shell 格式 cmd command param1 param2 entrypoint用...

Docker技巧之Entrypoint的使用

正確使用dockerfile中的entrypoint命令 如何正確地構建docker映象,對於正確使用docker是非常關鍵的。如果你想要定義容器需要執行的命令,而將命令列引數留給使用者提供,則使用dockerfile中的entrypoint命令是十分方便的。作為演示,我們假設乙個簡單的場景 公司的...

AMD和CMD的區別

關於這兩個的區別網上可以搜出一堆文章,簡單總結一下 最明顯的區別就是在模組定義時對依賴的處理不同 1 amd推崇依賴前置,在定義模組的時候就要宣告其依賴的模組 2 cmd推崇就近依賴,只有在用到某個模組的時候再去require 這種區別各有優劣,只是語法上的差距,而且requirejs和seajs都...