在 Docker Compose 中,command字段定义的命令是在容器启动时执行的默认命令。这意味着每次启动或重启容器时,都会执行command中定义的命令。
如果你希望在容器创建时执行一次特定的命令,而不是每次启动都执行,可以使用以下方法:
使用 entrypoint 脚本:
在 Docker Compose 中,你可以通过创建一个自定义的 entrypoint 脚本来实现在容器创建时执行一次的操作。entrypoint 脚本是在容器启动时执行的脚本,通常被用于初始化工作。
例如,你可以创建一个名为 entrypoint.sh 的脚本文件,然后在 docker-compose.yml 文件中引用它:
version: '3'
services:
my-service:
build:
context: .
entrypoint: /app/entrypoint.sh
# 其他服务配置...
在 entrypoint.sh 中,你可以编写需要在容器创建时执行的命令,并在最后调用 exec "$@" 以保持容器正常运行:
#!/bin/bash
# 在容器创建时执行的命令
echo "Initialization command"
# 执行 CMD 中定义的命令
exec "$@"
这样,entrypoint.sh 中的命令将只在容器创建时执行一次。
将 command 配置在 Dockerfile 的 cmd 中
如果你只希望在容器创建时执行一次特定的命令,而不是每次启动都执行,可以将该命令直接包含在 Dockerfile 中。在 Dockerfile 的 CMD 指令中设置你希望执行的命令,而不在 docker-compose.yml 中的 command 中设置。
Dockerfile 示例:
FROM your-base-image
# 在容器创建时执行的命令
CMD ["your-initialization-command"]
# 其他 Dockerfile 配置...
在这种情况下,CMD 中定义的命令将只在容器创建时执行一次。