docker從Path值看容器啟動(dòng)命令方式
在 Docker 容器的配置文件 config.v2.json 中,"Path" 字段指定了容器啟動(dòng)時(shí)要執(zhí)行的主程序(可執(zhí)行文件)的路徑。
它決定了容器運(yùn)行時(shí)的入口點(diǎn)(Entry Point),通常與 "Args" 字段配合使用,共同構(gòu)成容器的啟動(dòng)命令。
一、Path 的常見(jiàn)值
“Path” 的值必須是容器文件系統(tǒng)中某個(gè)可執(zhí)行文件的 絕對(duì)路徑,常見(jiàn)的值包括:
| 示例值 | 說(shuō)明 |
|---|---|
| /bin/bash | 啟動(dòng) Bash shell(常用于交互式容器) |
| /bin/sh | 啟動(dòng)默認(rèn)的 shell(如 Alpine 系統(tǒng)) |
| /usr/bin/python | 運(yùn)行 Python 腳本(需在 Dockerfile 中安裝 Python) |
| /usr/local/bin/app | 自定義應(yīng)用程序的路徑(需在容器中預(yù)裝) |
| /entrypoint.sh | 自定義入口腳本(需在 Dockerfile 中賦予可執(zhí)行權(quán)限) |
| /proc/self/exe | 特殊值,表示當(dāng)前進(jìn)程的自身(用于調(diào)試或特殊場(chǎng)景) |
二、Path 的生成規(guī)則
2.1、Dockerfile 中的 CMD 或 ENTRYPOINT
如果 Dockerfile 中定義了 CMD 或 ENTRYPOINT,Docker 會(huì)將其解析為 "Path" 和 "Args"。
示例 1(CMD):
CMD ["nginx", "-g", "daemon off;"]
對(duì)應(yīng)的 config.v2.json:
"Path": "/usr/sbin/nginx", "Args": ["-g", "daemon off;"]
示例 2(ENTRYPOINT + CMD):
ENTRYPOINT ["/bin/sh", "-c"] CMD ["echo 'Hello Docker!'"]
對(duì)應(yīng)的 config.v2.json:
"Path": "/bin/sh", "Args": ["-c", "echo 'Hello Docker!'"]
2.2、 docker run 命令的參數(shù)
如果用戶(hù)在 docker run 中顯式指定命令,會(huì)覆蓋 Dockerfile 中的 CMD。
示例:
docker run -it ubuntu /bin/bash
對(duì)應(yīng)的 config.v2.json:
"Path": "/bin/bash", "Args": []
2.3、 --entrypoint 參數(shù)
使用 --entrypoint 可以覆蓋 Dockerfile 中的 ENTRYPOINT。
示例:
docker run --entrypoint /bin/sh nginx
對(duì)應(yīng)的 config.v2.json:
"Path": "/bin/sh", "Args": []
三、Path 的限制
- 必須是絕對(duì)路徑:Docker 不支持相對(duì)路徑(如 ./bin/app),否則會(huì)嘗試在 $PATH 中查找。
- 可執(zhí)行權(quán)限:目標(biāo)路徑必須是可執(zhí)行文件,否則容器啟動(dòng)失敗。
與 Entrypoint 的關(guān)系:
- 如果 Dockerfile 中定義了 ENTRYPOINT,“Path” 會(huì)優(yōu)先使用 ENTRYPOINT 的值。
- 如果未定義 ENTRYPOINT,“Path” 會(huì)從 CMD 的第一個(gè)參數(shù)推導(dǎo)。
四、實(shí)際使用
4.1、 Nginx 容器
"Path": "/usr/sbin/nginx", "Args": ["-g", "daemon off;"]
對(duì)應(yīng)命令:nginx -g "daemon off;",用于以后臺(tái)模式運(yùn)行 Nginx。
4.2、 交互式 Shell
"Path": "/bin/bash", "Args": []
對(duì)應(yīng)命令:bash,進(jìn)入容器的交互式終端。
4.3、 sleep
"Path": "sleep" "Args": [10000]
對(duì)應(yīng)命令:sleep 10000,容器保持運(yùn)行狀態(tài)10000 s
4.3、 自定義腳本
"Path": "/app/start.sh", "Args": []
要求 /app/start.sh 是可執(zhí)行腳本(需在 Dockerfile 中 RUN chmod +x /app/start.sh)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker安裝Nginx并部署及MySQL容器構(gòu)建全過(guò)程
眾所周知Docker是一種容器化技術(shù),可以用來(lái)快速部署和管理應(yīng)用程序,這篇文章主要給大家介紹了關(guān)于Docker安裝Nginx并部署及MySQL容器構(gòu)建的相關(guān)資料,需要的朋友可以參考下2024-02-02
使用Docker部署的基于binlog實(shí)現(xiàn)Mysql8的操作方法
MySQL 基于?Binlog?的主從復(fù)制(Master-Slave Replication)是 MySQL 數(shù)據(jù)庫(kù)中實(shí)現(xiàn)數(shù)據(jù)復(fù)制的一種機(jī)制,這篇文章主要介紹了使用Docker部署的基于binlog實(shí)現(xiàn)Mysql8,需要的朋友可以參考下2025-01-01
理解Docker(1):Docker安裝和基礎(chǔ)用法詳細(xì)介紹
本篇文章主要是介紹了Docker 安裝和基礎(chǔ)用法,對(duì)于想要需要的Docker的同學(xué)可以了解一下。2016-11-11
docker 如何實(shí)現(xiàn)磁盤(pán)讀寫(xiě)
本文主要介紹了docker實(shí)現(xiàn)磁盤(pán)讀寫(xiě),包括創(chuàng)建Docker鏡像、運(yùn)行 Docker容器以及在容器中進(jìn)行磁盤(pán)讀寫(xiě)操作的步驟和代碼示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
使用docker部署django技術(shù)棧項(xiàng)目的方法步驟
這篇文章主要介紹了使用docker部署django技術(shù)棧項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
如何利用Docker部署一個(gè)簡(jiǎn)單的springboot項(xiàng)目
這篇文章主要介紹了如何利用Docker部署一個(gè)簡(jiǎn)單的springboot項(xiàng)目,本文通過(guò)實(shí)例圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02

