You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose中MariaDB执行自定义command后退出码0不启动服务问题

问题根因

你自定义的command配置确实覆盖了MariaDB官方镜像默认的启动逻辑。官方MariaDB镜像默认的启动流程是先执行/docker-entrypoint-initdb.d目录下的所有初始化脚本,再启动MariaDB主进程持续运行。你当前写的command仅执行了安装wget、下载解压sakila库、移动SQL文件的逻辑,执行完成后没有调用镜像原本的启动命令,所以容器会直接正常退出(退出码0)。

解决方案

方案一:本地挂载初始化SQL(最推荐)

完全不需要自定义command或镜像,直接将sakila库的SQL文件下载到本地,通过volumes挂载到容器初始化目录即可,步骤如下:

  1. 本地下载sakila-db.tar.gz并解压,得到sakila-schema.sql和sakila-data.sql两个文件,放在项目的init-sql目录下
  2. 修改docker-compose.yml的db服务配置如下:
version: '3.1'

services:
  db:
    image: mariadb:10.3
    volumes:
      - ./init-sql:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: notSecureChangeMe

  phpmyadmin:
    image: phpmyadmin
    restart: always
    ports:
      - 8080:80

这种方案启动速度快,没有冗余操作,符合Docker最佳实践。


方案二:修改command追加默认启动逻辑

如果必须保留在容器启动时下载SQL的逻辑,只需要在你现有command的最后追加官方镜像的启动命令即可:

command: |
  sh -c " echo 'Starting Commands'&& apt-get update && apt-get install -y wget && wget https://downloads.mysql.com/docs/sakila-db.tar.gz && tar xzf sakila-db.tar.gz && echo 'Extraction Finished' && mv sakila-db/sakila-schema.sql /docker-entrypoint-initdb.d/1.sql && mv sakila-db/sakila-data.sql /docker-entrypoint-initdb.d/2.sql && echo '    Finished Commands' && docker-entrypoint.sh mysqld"

追加的docker-entrypoint.sh mysqld就是官方镜像默认的启动命令,会自动执行初始化目录的SQL再启动MariaDB服务。


方案三:构建自定义镜像(适合频繁启动的场景)

如果不想每次启动容器都执行apt安装、下载文件的操作,可以把这部分逻辑打包成自定义镜像:

  1. 新建Dockerfile文件,内容如下:
FROM mariadb:10.3
RUN apt-get update && apt-get install -y wget \
    && wget https://downloads.mysql.com/docs/sakila-db.tar.gz \
    && tar xzf sakila-db.tar.gz \
    && mv sakila-db/sakila-schema.sql /docker-entrypoint-initdb.d/1.sql \
    && mv sakila-db/sakila-data.sql /docker-entrypoint-initdb.d/2.sql \
    && apt-get purge -y wget && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* /sakila-db.tar.gz /sakila-db
  1. 修改docker-compose.yml的db服务配置:
db:
  build: .
  environment:
    MYSQL_ROOT_PASSWORD: notSecureChangeMe

启动时执行docker-compose up --build即可,后续启动不需要再重复执行安装下载逻辑。

内容的提问来源于stack exchange,提问作者Martin Larizzate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:06:08