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

如何防止Docker Compose中的Minio MC容器执行命令后退出

解决MinIO MC容器执行初始化后自动退出的问题

容器执行完初始化命令就退出,核心原因是容器的主进程(这里是/bin/sh)在脚本执行完毕后就会终止,即使移除exit 0也没用。要让容器保持运行,需要让主进程持续处于活跃状态,以下是几种可行方案:

方案一:在初始化脚本末尾添加阻塞命令

修改ready_minio的entrypoint,在所有初始化命令后添加tail -f /dev/null——这个命令会持续读取空设备,让进程一直处于运行状态:

ready_minio:
  image: minio/mc
  env_file:
    - ./envs/local.env
  entrypoint: >
    /bin/sh -c "
        until (/usr/bin/mc config host add myminio http://minio:9000 minio minio123) do echo '...waiting...' &&
    sleep 1;
    done;
    /usr/bin/mc alias set myminio http://minio:9000 minio minio123;
    /usr/bin/mc admin user add myminio/ $${MINIO_ACCESS_KEY} $${MINIO_SECRET_KEY};
    /usr/bin/mc admin policy set myminio/ readwrite user=$${MINIO_ACCESS_KEY};
    /usr/bin/mc mb myminio/$${MINIO_MEDIA_FILES_BUCKET};
    /usr/bin/mc policy set public myminio/$${MINIO_MEDIA_FILES_BUCKET};
    tail -f /dev/null;
    "
  depends_on:
    - minio

修改后启动容器,初始化完成后会保持存活,你可以正常用docker exec -it ready_minio /bin/sh进入执行命令。

方案二:拆分初始化与常驻容器

如果不需要每次启动mc容器都重复执行初始化逻辑,可以把初始化和常驻功能拆成两个服务:

  • 一个一次性容器负责执行初始化,完成后自动退出
  • 另一个常驻容器保持运行,供你随时进入操作

修改后的docker-compose.yaml示例:

version: '3'

services:
  minio:
    image: minio/minio
    command: server --address 0.0.0.0:9000 --console-address 0.0.0.0:9001 /data
    volumes:
      - minio-data:/data
    expose:
      - 9000
    ports:
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123

  # 一次性初始化容器
  minio_init:
    image: minio/mc
    env_file:
      - ./envs/local.env
    entrypoint: >
      /bin/sh -c "
          until (/usr/bin/mc config host add myminio http://minio:9000 minio minio123) do echo '...waiting...' &&
      sleep 1;
      done;
      /usr/bin/mc alias set myminio http://minio:9000 minio minio123;
      /usr/bin/mc admin user add myminio/ $${MINIO_ACCESS_KEY} $${MINIO_SECRET_KEY};
      /usr/bin/mc admin policy set myminio/ readwrite user=$${MINIO_ACCESS_KEY};
      /usr/bin/mc mb myminio/$${MINIO_MEDIA_FILES_BUCKET};
      /usr/bin/mc policy set public myminio/$${MINIO_MEDIA_FILES_BUCKET};
      "
    depends_on:
      - minio

  # 常驻MC容器
  minio_mc:
    image: minio/mc
    entrypoint: /bin/sh
    tty: true
    stdin_open: true
    depends_on:
      - minio_init

volumes:
  minio-data:

启动后,minio_init执行完初始化就退出,minio_mc会一直保持运行,你可以用docker exec -it minio_mc /bin/sh进入操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:05:45