在CasaOS中配置Docker Compose MariaDB命令时触发SIGTERM报错
问题:CasaOS中Docker Compose配置MariaDB启动参数报错「命令未找到」
在CasaOS环境下运行Docker,为MariaDB容器的docker-compose.yml的command段指定--max_allowed_packet=1024、--log_warnings=9这类启动参数时,容器启动失败,报错「命令未找到」并触发SIGTERM信号。尝试通过CasaOS GUI的「容器命令」栏设置相同参数,问题依旧。
配置文件
version: "2.1" services: mariadb: image: lscr.io/linuxserver/mariadb:latest command: --max_allowed_packet=1024 --log_warnings=9 container_name: mariadb environment: - MYSQL_ROOT_PASSWORD=X volumes: - /media/user/x/x/config:/config - /media/user/x/x/confd:/etc/conf.d ports: - 3306:3306 restart: unless-stopped
报错日志片段
mariadb | [ls.io-init] done. mariadb | /run/s6/basedir/scripts/rc.init: line 76: --max_allowed_packet=2137: not found** mariadb | Caught SIGTERM signal! mariadb | [migrations] started mariadb | [migrations] no migrations found mariadb | usermod: no changes
解决方案
问题根源在于LinuxServer.io提供的MariaDB镜像启动逻辑特殊:它采用S6 init系统管理启动流程,默认entrypoint不是直接调用mysqld,而是先执行初始化脚本。直接在command字段传入参数,会被当成独立命令执行,导致系统找不到该命令。
方法1:通过环境变量传递启动参数
该镜像支持使用MYSQL_OPTS环境变量传递mysqld的启动参数,修改docker-compose.yml的environment部分即可:
version: "2.1" services: mariadb: image: lscr.io/linuxserver/mariadb:latest container_name: mariadb environment: - MYSQL_ROOT_PASSWORD=X - MYSQL_OPTS="--max_allowed_packet=1024M --log_warnings=9" volumes: - /media/user/x/x/config:/config - /media/user/x/x/confd:/etc/conf.d ports: - 3306:3306 restart: unless-stopped
注意:
max_allowed_packet=1024单位是字节,数值过小会导致后续数据库操作失败,建议改为1024M(1GB)。
方法2:挂载自定义配置文件
直接挂载MariaDB的配置文件到容器,覆盖默认设置:
- 在宿主机的
/media/user/x/x/config目录下创建my.cnf文件,添加配置项:
[mysqld] max_allowed_packet=1024M log_warnings=9
- 确保docker-compose.yml中已挂载
/media/user/x/x/config:/config,该镜像会自动加载此目录下的my.cnf配置。
内容的提问来源于stack exchange,提问作者Pomeran
相关产品推荐
相关产品推荐

