为何docker-compose仅启动sheet-service容器且名称不符?
Docker-Compose仅启动sheet-service且容器名称不符问题排查与解决
问题现象
- 执行
docker-compose up --build时,仅sheet-service相关容器被启动,db、adminer、nginx-reverse-proxy均未启动 - 执行
docker ps -a查看容器,发现运行的容器名称与docker-compose.yml中指定的sheet-service不一致 - 注释docker-compose.yml中sheet-service的配置后,其余所有容器可正常启动
- 使用
docker-compose run <container_name>逐个启动容器时,所有容器均可成功运行,无报错
核心原因
问题出在sheet-service的Dockerfile中:
RUN npm run start
RUN指令是在镜像构建阶段执行的命令,执行这个命令会启动Node服务并保持运行状态,导致Docker构建过程中的临时容器无法退出,docker-compose会一直卡在构建sheet-service的步骤,无法继续启动其他服务。你看到的运行容器是构建过程中的临时容器,并非最终要运行的服务容器,因此名称与配置中的sheet-service不符。
解决方案
将Dockerfile中的RUN npm run start替换为CMD指令,CMD是容器启动时执行的命令,不会阻塞镜像构建流程:
修改后的Dockerfile:
FROM node:14.15.0 # Create app directory WORKDIR /usr/src/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY package*.json ./ RUN npm ci --only=production COPY . . # 替换为CMD指令 CMD ["npm", "run", "start"] # 或者直接指定启动命令:CMD ["node", "src/index.js"]
验证步骤
- 保存修改后的Dockerfile
- 重新执行
docker-compose up --build - 执行
docker ps -a查看所有容器是否正常启动,且sheet-service容器名称与配置一致
内容的提问来源于stack exchange,提问作者0xC0DEGURU
相关产品推荐
相关产品推荐

