Docker compose 允许您将多个容器作为一个单元进行管理。但是,仅执行一次命令可能具有挑战性,尤其是在处理依赖于数据的流程(例如设置数据库)时。
在您的撰写文件中,您已创建用于存储 MongoDB 数据的“mongodata”数据卷容器。该容器本质上是一个暂停的容器,只是挂载指定的卷。
一次性初始化的入口点脚本:
为了防止“-setup”命令多次执行,您可以在“my_project”容器中使用入口点脚本。此脚本将检查数据库是否已初始化,并仅在必要时执行设置。
示例:
#!/bin/sh # Check if database is initialized if test -f /app/initialized; then # Database already initialized, skip setup echo "Database already initialized" else # Initialize database ./my-project -setup touch /app/initialized fi # Start the application exec /go/bin/my_project
Docker 1.9 及更高版本提供本机卷管理功能,消除了对“仅数据”容器的需求。您可以按如下方式简化撰写文件:
services: mongo: image: mongo:latest volumes: - mongodata:/data/db ports: - "28001:27017" command: --smallfiles --rest --auth
在入口点脚本中,处理数据库可用性中的潜在延迟至关重要。如果数据库尚不可访问,脚本应重试连接。
以上是如何在 Docker Compose 中为数据相关进程运行一次命令?的详细内容。更多信息请关注PHP中文网其他相关文章!