文章目录
-
- [一、Path 的常见值](#一、Path 的常见值)
- [二、Path 的生成规则](#二、Path 的生成规则)
-
- [2.1、Dockerfile 中的 CMD 或 ENTRYPOINT](#2.1、Dockerfile 中的 CMD 或 ENTRYPOINT)
- [2.2、 docker run 命令的参数](#2.2、 docker run 命令的参数)
- [2.3、 --entrypoint 参数](#2.3、 --entrypoint 参数)
- [三、Path 的限制](#三、Path 的限制)
- 四、实际使用
-
- [4.1、 Nginx 容器](#4.1、 Nginx 容器)
- [4.2、 交互式 Shell](#4.2、 交互式 Shell)
- [4.3、 sleep](#4.3、 sleep)
- [4.3、 自定义脚本](#4.3、 自定义脚本)
在 Docker 容器的配置文件 config.v2.json 中,"Path" 字段指定了容器启动时要执行的主程序 (可执行文件)的路径。它决定了容器运行时的入口点(Entry Point),通常与 "Args" 字段配合使用,共同构成容器的启动命令。
一、Path 的常见值
"Path" 的值必须是容器文件系统中某个可执行文件的 绝对路径,常见的值包括:
| 示例值 | 说明 |
|---|---|
/bin/bash |
启动 Bash shell(常用于交互式容器) |
/bin/sh |
启动默认的 shell(如 Alpine 系统) |
/usr/bin/python |
运行 Python 脚本(需在 Dockerfile 中安装 Python) |
/usr/local/bin/app |
自定义应用程序的路径(需在容器中预装) |
/entrypoint.sh |
自定义入口脚本(需在 Dockerfile 中赋予可执行权限) |
/proc/self/exe |
特殊值,表示当前进程的自身(用于调试或特殊场景) |
二、Path 的生成规则
2.1、Dockerfile 中的 CMD 或 ENTRYPOINT
如果 Dockerfile 中定义了 CMD 或 ENTRYPOINT,Docker 会将其解析为 "Path" 和 "Args"。
示例 1(CMD):
Dockerfile
CMD ["nginx", "-g", "daemon off;"]
对应的 config.v2.json:
json
"Path": "/usr/sbin/nginx",
"Args": ["-g", "daemon off;"]
示例 2(ENTRYPOINT + CMD):
Dockerfile
ENTRYPOINT ["/bin/sh", "-c"]
CMD ["echo 'Hello Docker!'"]
对应的 config.v2.json:
json
"Path": "/bin/sh",
"Args": ["-c", "echo 'Hello Docker!'"]
2.2、 docker run 命令的参数
如果用户在 docker run 中显式指定命令,会覆盖 Dockerfile 中的 CMD。
示例:
bash
docker run -it ubuntu /bin/bash
对应的 config.v2.json:
json
"Path": "/bin/bash",
"Args": []
2.3、 --entrypoint 参数
使用 --entrypoint 可以覆盖 Dockerfile 中的 ENTRYPOINT。
示例:
bash
docker run --entrypoint /bin/sh nginx
对应的 config.v2.json:
json
"Path": "/bin/sh",
"Args": []
三、Path 的限制
- 必须是绝对路径:Docker 不支持相对路径(如 ./bin/app),否则会尝试在 $PATH 中查找。
- 可执行权限:目标路径必须是可执行文件,否则容器启动失败。
- 与 Entrypoint 的关系:
- 如果 Dockerfile 中定义了 ENTRYPOINT,"Path" 会优先使用 ENTRYPOINT 的值。
- 如果未定义 ENTRYPOINT,"Path" 会从 CMD 的第一个参数推导。
四、实际使用
4.1、 Nginx 容器
json
"Path": "/usr/sbin/nginx",
"Args": ["-g", "daemon off;"]
对应命令:nginx -g "daemon off;",用于以后台模式运行 Nginx。
4.2、 交互式 Shell
json
"Path": "/bin/bash",
"Args": []
对应命令:bash,进入容器的交互式终端。
4.3、 sleep
json
"Path": "sleep"
"Args": [10000]
对应命令:sleep 10000,容器保持运行状态10000 s
4.3、 自定义脚本
json
"Path": "/app/start.sh",
"Args": []
要求 /app/start.sh 是可执行脚本(需在 Dockerfile 中 RUN chmod +x /app/start.sh)。