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

docker build构建镜像正常,docker compose build却超时挂起

Docker Compose构建镜像超时问题排查方向

使用docker build . --network host可正常完成镜像构建,但执行docker compose build时,无论在docker-compose.yml中是否为目标服务设置network_mode: "host",构建过程执行到RUN apk update ...步骤都会挂起并最终抛出连接超时错误。

相关配置文件

Dockerfile

FROM python:3.10-alpine3.18

COPY . .

RUN apk update && apk upgrade \
    && apk add git vim busybox \
    && pip3 install -r requirements.txt

ENTRYPOINT ["busybox"]
CMD ["crond", "-f"]

docker-compose.yml

version: "3.7"

services:
  mongodb:
    container_name: mongo-server
    image: mongo:6.0
    networks:
      - mynet

  mongo-express:
    image: mongo-express:latest
    networks:
      - mynet
    depends_on:
      - mongodb
    ports:
      - "8081:8081"

  repository:
    container_name: repository
    network_mode: "host"
    build:
      context: .
      dockerfile: Dockerfile

networks:
  mynet:
    external: true

排查方向

  • 区分构建阶段与运行时的网络设置:network_mode: host是容器运行时的配置,构建阶段不生效。Docker Compose默认使用专属构建网络,需在build配置中显式指定网络对齐单独构建的参数:

    repository:
      build:
        context: .
        dockerfile: Dockerfile
        network: host
    
  • 核对代理变量传递逻辑:单独docker build可能继承终端代理环境变量,但Docker Compose构建时未必自动传递。可在docker-compose.yml的build部分显式传入:

    repository:
      build:
        context: .
        dockerfile: Dockerfile
        args:
          http_proxy: ${http_proxy}
          https_proxy: ${https_proxy}
          no_proxy: ${no_proxy}
    

    同时在Dockerfile开头添加对应ARG声明:

    ARG http_proxy
    ARG https_proxy
    ARG no_proxy
    

    另外检查Docker daemon全局代理配置(/etc/docker/daemon.json),确认Compose是否能读取该配置。

  • 排查外部网络mynet的间接影响:尽管构建阶段理论上不依赖运行时网络,但如果mynet存在DNS配置错误、网络隔离等问题,可能间接干扰构建环境。可临时注释该网络配置,改用默认网络测试。

  • 查看详细构建日志:执行docker compose build --no-cache --progress plain repository,获取更精细的输出,确认超时是DNS解析失败还是TCP连接超时。

  • 模拟构建环境的网络连通性:手动启动Alpine容器,使用Compose构建时的网络测试连通性:

    # 先通过docker network ls找到Compose构建用的网络名称
    docker run --rm --network <构建网络名称> alpine:3.18 ping -c 3 mirrors.aliyun.com
    docker run --rm --network <构建网络名称> alpine:3.18 wget -qO- http://mirrors.aliyun.com/alpine/v3.18/main/
    
  • 检查Docker Compose版本兼容性:不同版本的Compose在构建网络处理上可能存在差异,尝试升级到最新稳定版或降级到兼容版本测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:22:14