使用 dockerfile 和/或 docker-compose 是否可以在 docker 镜像启动后运行命令?

使用 dockerfile 和/或 docker-compose 是否可以在 docker 镜像启动后运行命令?

我正在尝试配置数据库容器 (PostgreSQL),并且我想通过对已启动的实例运行 SQL 命令来配置一些数据库设置。dockerfile 中的 RUN 命令在数据库启动之前运行。

我想我可以创建一个脚本,首先启动 docker 实例,然后推出配置,但这既不便携也不优雅。

有没有办法以某种方式配置 RUN 命令或类似命令在容器实例启动后运行?

在此先感谢您的帮助。

答案1

一种解决方案可能是:

  1. 创建一个 bash 脚本,其中包含要在容器内运行的启动命令

  2. COPY使用命令将该脚本复制到 docker 镜像中

  3. 更改RUN命令以Dockerfile在启动时运行脚本,而不是postgres直接调用

  4. 确保你的脚本在配置命令之前调用postgres(就像原始命令一样)RUN

您可能需要脚本在后台运行 postgres:

# Run postgres, but in the background, so we can execute more commands
postgres ... & pg_pid="$!"

# Your configuration commands here
...

# Tell bash not to exit until postgres does
wait $pg_pid

但是,我不知道postgres在这种情况下docker是否会平稳关闭。(它可能只是杀死shell。)


您还可以RUN通过指定启动命令来覆盖默认命令docker run ...

相关内容