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

Docker Swarm集群创建服务后副本为0/1无法生成容器问题求助

故障原因
  • 核心拼写错误:Dockerfile的CMD指令中httpd可执行文件路径写错,原配置为/user/sbin/httpd,CentOS系统中httpd的默认正确路径为/usr/sbin/httpd。路径错误会导致容器启动时直接报错退出,Swarm集群会持续尝试重启失败的容器,因此服务创建命令会卡在等待就绪状态,副本数始终显示0/1。
  • 其他可能原因:
    1. 集群节点80端口已被其他服务(如Nginx、Apache、其他容器)占用,端口映射失败导致容器无法启动
    2. 部分节点构建镜像失败,Swarm调度到无该镜像的节点时无法拉取本地镜像(默认配置下Swarm不会自动分发本地构建的镜像)
    3. 构建镜像时ADD指令下载的模板压缩包损坏,导致解压步骤失败,镜像构建不完整
解决步骤
  1. 修正Dockerfile内容,参考修正后的配置如下:
FROM centos:latest
LABEL maintainer="nityaranjan190592@gmail.com"

RUN yum install -y httpd zip unzip && \
    yum clean all

ADD https://www.free-css.com/assets/files/free-css-templates/download/page247/kindle.zip /var/www/html/ 

WORKDIR /var/www/html
RUN unzip kindle.zip && \
    cp -rvf markups-kindle/* . && \
    rm -rf __MACOSX markups-kindle kindle.zip

CMD ["/usr/sbin/httpd" , "-D" , "FOREGROUND"]
EXPOSE 80 
  1. 在所有集群节点重新执行镜像构建命令,确保所有节点都存在正确的镜像:
docker image build -t webimage:1 .
  1. 检查所有节点的80端口占用情况,如有占用可停止对应服务,或修改服务创建命令的端口映射:
# 检查80端口占用
ss -tulpn | grep :80
# 若要更换端口,创建服务时改为映射8080端口
docker service create --name webserver -p 8080:80 webimage:1
  1. 若服务仍启动失败,可执行以下命令查看具体故障日志定位问题:
# 查看服务调度失败原因
docker service ps webserver --no-trunc
# 查看失败容器的启动日志
docker logs <对应失败容器的ID>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:30:03