![使用 dockerfile 和/或 docker-compose 是否可以在 docker 镜像启动后运行命令?](https://linux22.com/image/753345/%E4%BD%BF%E7%94%A8%20dockerfile%20%E5%92%8C%2F%E6%88%96%20docker-compose%20%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%9C%A8%20docker%20%E9%95%9C%E5%83%8F%E5%90%AF%E5%8A%A8%E5%90%8E%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我正在尝试配置数据库容器 (PostgreSQL),并且我想通过对已启动的实例运行 SQL 命令来配置一些数据库设置。dockerfile 中的 RUN 命令在数据库启动之前运行。
我想我可以创建一个脚本,首先启动 docker 实例,然后推出配置,但这既不便携也不优雅。
有没有办法以某种方式配置 RUN 命令或类似命令在容器实例启动后运行?
在此先感谢您的帮助。
答案1
一种解决方案可能是:
创建一个 bash 脚本,其中包含要在容器内运行的启动命令
COPY
使用命令将该脚本复制到 docker 镜像中更改
RUN
命令以Dockerfile
在启动时运行脚本,而不是postgres
直接调用确保你的脚本在配置命令之前调用
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 ...