docker-compose.yml entrypoint 和command 关系
在 docker-compose.yml
文件中,entrypoint
和 command
是两个用于定义容器启动时执行的命令的关键字。它们之间的关系和作用如下:
entrypoint
- 作用:
entrypoint
定义了容器启动时默认执行的命令或脚本。这个命令通常是一个可执行文件或脚本,它会在容器启动时首先运行。 - 格式: 可以是字符串或列表。
- 字符串格式:
entrypoint: "/path/to/entrypoint.sh"
- 列表格式:
entrypoint: ["/path/to/entrypoint.sh", "arg1", "arg2"]
- 字符串格式:
command
- 作用:
command
定义了传递给entrypoint
的参数。如果entrypoint
已经定义,command
会作为参数传递给entrypoint
;如果entrypoint
没有定义,command
会作为容器的主命令运行。 - 格式: 可以是字符串或列表。
- 字符串格式:
command: "arg1 arg2"
- 列表格式:
command: ["arg1", "arg2"]
- 字符串格式:
关系和执行顺序
-
如果只定义了
entrypoint
:- 容器启动时会执行
entrypoint
指定的命令或脚本。 - 如果没有额外的参数传递,
entrypoint
会以默认参数运行。
- 容器启动时会执行
-
如果只定义了
command
:- 容器启动时会执行
command
指定的命令。 - 如果没有
entrypoint
,command
就是容器的主命令。
- 容器启动时会执行
-
如果同时定义了
entrypoint
和command
:- 容器启动时会先执行
entrypoint
指定的命令或脚本。 command
指定的参数会作为entrypoint
的参数传递给它。
- 容器启动时会先执行
示例
version: '3'
services:
my_service:
image: my_image
entrypoint: ["/path/to/entrypoint.sh"]
command: ["arg1", "arg2"]
在这个例子中:
- 容器启动时会首先执行
/path/to/entrypoint.sh
。 arg1
和arg2
会作为参数传递给/path/to/entrypoint.sh
。
总结
entrypoint
定义了容器启动时的主命令或脚本。command
定义了传递给entrypoint
的参数。- 如果同时定义了
entrypoint
和command
,command
的值会作为参数传递给entrypoint
。
理解这两者的关系和作用,可以帮助你更好地控制容器的启动行为。