首页 > 后端开发 > Golang > 如何使用入口点脚本在 Docker Compose 中执行一次性命令?

如何使用入口点脚本在 Docker Compose 中执行一次性命令?

Susan Sarandon
发布: 2024-11-11 16:57:03
原创
555 人浏览过

How to Execute One-Time Commands in Docker Compose with Entrypoint Scripts?

如何在 Docker Compose 中执行一次性命令

要设置一个命令只需要执行一次的 Docker 环境,例如填充数据库,建议的方法是使用入口点脚本。

入口点脚本

在容器映像中创建一个入口点脚本,通常命名为entrypoint.sh 。该脚本将检查数据库初始化是否已完成,如果未完成,则执行必要的操作。

以下是基于官方 WordPress 映像的示例入口点脚本:

#!/bin/bash

set -e

# Function to check if database initialization is needed
is_init_needed() {
  # Insert database initialization check logic here
  return 0
}

# Check if initialization is needed
if is_init_needed; then
  # Perform database initialization
  echo "Initializing database..."
  /usr/bin/mysql -u "root" -p"$MYSQL_ROOT_PASSWORD" -h "mysql" < /usr/local/init.sql
  echo "Database initialized successfully."
fi

# Start the application
exec "$@"
登录后复制

Docker Compose 配置

在 docker-compose.yml 文件中,在需要初始化的服务的入口点键中指定入口点脚本,如下所示:

services:
  my_project:
    build: .
    entrypoint: ["./entrypoint.sh"]
    ...
登录后复制

附加说明

  • 正如答案中提到的,自 Docker 1.9 以来,使用“仅数据容器”进行 Docker 卷管理已经过时了。相反,您可以使用卷键直接将卷附加到服务。
  • 入口点脚本应考虑数据库容器可能在应用程序容器之后启动的可能性。
  • Docker Compose 遵循严格的规则启动服务时订购。 my_project 服务只有在其依赖项(mongo 和 mongodata)准备就绪后才会启动。

以上是如何使用入口点脚本在 Docker Compose 中执行一次性命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板