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

自定义Docker Compose容器为何以代码0立即退出?如何维持运行?

问题

我正在运行一个基于自定义Dockerfile构建的Docker Compose应用。尝试通过ENTRYPOINT和CMD执行sleep 99999999999999999999命令,但mi-www_site容器仍立即以代码0退出。

相关配置文件

d.mi.docker-compose.yml

services:
  traefik:
    image: "traefik:v2.10"
    container_name: "traefik"
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
    ports:
      - "127.0.0.1:80:80"
      - "127.0.0.1:8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
  mi-www_site:
    container_name: mi-www_site
    build:
      dockerfile: ./d.mi-www_site.Dockerfile
    env_file:
      - .env
    environment:
      USE_S3: 1
      REDIS_HOST: "mi-redis"
    expose:
      - "80"
      - "443"
      - "6379"
    ports:
      - 127.0.0.1:${MI_WWW_SITE_PORT}:${MI_WWW_SITE_PORT}
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`mi-www.site`)"
      - "traefik.http.routers.whoami.entrypoints=web"
  redis:
    image: redis:alpine
    container_name: mi-redis
    read_only: false
    restart: unless-stopped
    env_file:
      - .env
    environment:
      REDIS_ARGS: --port 6379 --save 20 1 --loglevel warning
    ports:
      - "6379"
    volumes:
      - /var/lib/mi-redis:/var/lib/redis
      - ./apps/mi-www.site/etc/redis:/etc/redis

d.mi-www_site.Dockerfile

FROM node:current-alpine
ARG USER
ARG UID=1000
ARG GID
WORKDIR /app
COPY apps/mi-www.site/dist ./
EXPOSE 4009
#CMD ["node", "./server/entry.mjs"]
ENTRYPOINT ["sleep", "99999999999999999999"]
#CMD ["sleep", "99999999999999999999"]

命令行执行输出

❯ docker compose -f d.mi.docker-compose.yml up
[+] Running 3/0
 ✔ Container traefik      Created                                                                                                                                                                                                                                                      0.0s
 ✔ Container mi-redis     Created                                                                                                                                                                                                                                                      0.0s
 ✔ Container mi-www_site  Created                                                                                                                                                                                                                                                      0.0s
Attaching to mi-redis, mi-www_site, traefik
mi-redis     | 1:C 14 Jul 2023 06:13:10.469 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
mi-redis     | 1:C 14 Jul 2023 06:13:10.469 # Redis version=7.0.12, bits=64, commit=00000000, modified=0, pid=1, just started
mi-redis     | 1:C 14 Jul 2023 06:13:10.469 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
mi-redis     | 1:M 14 Jul 2023 06:13:10.469 * monotonic clock: POSIX clock_gettime
mi-redis     | 1:M 14 Jul 2023 06:13:10.469 * Running mode=standalone, port=6379.
mi-redis     | 1:M 14 Jul 2023 06:13:10.469 # Server initialized
mi-redis     | 1:M 14 Jul 2023 06:13:10.470 * Loading RDB produced by version 7.0.12
mi-redis     | 1:M 14 Jul 2023 06:13:10.470 * RDB age 122 seconds
mi-redis     | 1:M 14 Jul 2023 06:13:10.470 * RDB memory usage when created 0.82 Mb
mi-redis     | 1:M 14 Jul 2023 06:13:10.470 * Done loading RDB, keys loaded: 0, keys expired: 0.
mi-redis     | 1:M 14 Jul 2023 06:13:10.470 * DB loaded from disk: 0.000 seconds
mi-redis     | 1:M 14 Jul 2023 06:13:10.470 * Ready to accept connections
traefik      | time="2023-07-14T06:13:10Z" level=info msg="Configuration loaded from flags."
mi-www_site exited with code 0

原因与解决方法

原因

你指定的sleep参数数值过大,超出了Linux系统能处理的最大值(通常为9223372036854775807)。当传入的数值超过这个上限时,sleep会将其视为非法输入,直接退出并返回状态码0。

解决方法

  • 使用合法的大数值:将sleep参数改为系统支持的最大值,比如9223372036854775807,或者用更易读的时长格式(如sleep 365d表示休眠一年)。
  • 改用无限休眠方式:如果需要容器持续运行,推荐用更可靠的命令:
    ENTRYPOINT ["tail", "-f", "/dev/null"]
    
    tail -f /dev/null会持续监听空设备,不会自动退出,是保持容器运行的常用方案。
  • 恢复原启动命令:如果最终目的是运行Node应用,直接取消Dockerfile中CMD ["node", "./server/entry.mjs"]的注释,移除sleep相关配置即可——正常的服务进程会让容器保持运行状态。

内容的提问来源于Stack Exchange,提问作者Brian Takita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:24:57