Write the Code. Change the World.

12月 25

在 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 中定义的命令将只在容器创建时执行一次。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注