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

