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

Redis Docker容器无法识别已复制的启动脚本问题

问题:多Redis容器启动脚本找不到,容器退出(退出码0)

场景说明

尝试通过同一个Dockerfile构建两个Redis容器,分别使用start-cache.sh和start-media.sh启动脚本配置密码、绑定主机、日志级别等参数,但运行docker compose后两个容器均退出(退出码0),提示启动脚本找不到。

相关配置文件

start-cache.sh

#!/bin/bash

set -o errexit
set -o pipefail
set -o nounset

redis-server --bind ${CACHE_REDIS_HOST} --save 60 1 --loglevel warning --requirepass ${CACHE_REDIS_PASSWORD}

start-media.sh

结构与start-cache.sh一致,仅Redis启动参数不同。

Dockerfile

FROM redis:7.2.1-alpine

COPY ./compose/local/redis/cache/start-cache.sh /start-cache
RUN sed -i 's/\r$//g' /start-cache
RUN chmod +x /start-cache

COPY ./compose/local/redis/media/start-media.sh /start-media
RUN sed -i 's/\r$//g' /start-media
RUN chmod +x /start-media

docker-compose.yml

....
media-cache:
  container_name: 'media_cache'
  build:
    context: .
    dockerfile: ./compose/local/redis/Dockerfile
  command: /start-media
  env_file:
    - .env
  ports:
    - 6371:6379
  volumes:
    - ./data/mediaRedis:/data
    - ./compose/local/redis/redis.conf:/etc/redis/redis.conf
  restart: always

db-cache:
  container_name: 'db_cache'
  build:
    context: .
    dockerfile: ./compose/local/redis/Dockerfile
  command: /start-cache
  env_file:
    - .env
  ports:
    - 6370:6379
  volumes:
    - ./data/dbRedis:/data
    - ./compose/local/redis/redis.conf:/etc/redis/redis.conf
  restart: always
....

redis.conf

bind 0.0.0.0

错误信息

/usr/local/bin/docker-entrypoint.sh: exec: line 24: /start-media: not found
/usr/local/bin/docker-entrypoint.sh: exec: line 24: /start-cache: not found

解决方案

  • 修正脚本shebang:Alpine Linux默认无bash,仅提供ash。将两个启动脚本的开头#!/bin/bash改为#!/bin/sh或#!/usr/bin/env sh,确保解释器存在。
  • 验证COPY路径:确认Dockerfile中的COPY路径相对于docker-compose.yml所在的build context(当前目录)正确。执行docker compose build --no-cache重新构建镜像,避免缓存导致文件未复制。
  • 检查镜像内文件:构建完成后,运行临时容器验证文件是否存在:
    docker run --rm $(docker compose build --quiet db-cache) ls -l /start-cache /start-media
    
    若文件不存在,需修正Dockerfile中的COPY路径。
  • 显式指定解释器(可选):在docker-compose的command中直接指定解释器,绕过shebang问题:
    command: sh /start-media
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:52:20