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

本地Docker Desktop构建含Terraform的Dockerfile失败求助

本地Docker构建失败但ADO流水线正常的问题排查

问题描述

本地使用Docker Desktop构建Dockerfile时失败,但相同的Dockerfile在Azure DevOps(ADO)流水线中可正常完成构建并推送镜像至仓库,需排查原因。

Dockerfile内容

# Use a base Ubuntu image
FROM ubuntu:22.04

# Set environment variables
ENV TARGETARCH="linux-x64"

# Update apt cache and install required packages
RUN apt-get update && \
    apt-get install -y \
        git \
        build-essential \
        unzip \
        lxc \
        wget \
        gpg \
        iptables \
        sudo \
        jq \
        libicu70 \
        bc \
        bash \
        iputils-ping \
        gnupg \
        lsb-release \
        telnet \
        ssh \
        nodejs \
        npm \
        gcc \
        sshpass \
        curl && \
    rm -rf /var/lib/apt/lists/*

# Install Azure CLI
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash

ARG TERRAFORM_VERSION=1.3.1

RUN wget -q "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip" -O tf.zip && \
    unzip tf.zip && \
    mv ./terraform /usr/local/bin/terraform && \
    chmod +x /usr/local/bin/terraform && \
    rm tf.zip

# Expose SSH and any other ports as necessary
EXPOSE 22

# Set working directory
WORKDIR /azp/

# Copy start script
COPY ./start.sh ./ 
RUN chmod +x ./start.sh

# Create agent user and set up home directory
RUN useradd -m -d /home/agent agent
RUN chown -R agent:agent /azp /home/agent

USER agent
# Another option is to run the agent as root.

ENTRYPOINT [ "./start.sh" ]

终端报错信息

=> ERROR [4/9] RUN wget -q "https://releases.hashicorp.com/terraform/1.3.1/terraform_1.3.1_linux_amd64.zip" -O tf.zip &&     unzip tf.zip &&     mv ./terraform /usr/local/bin/terraform &&     chmod +x /usr/local/bin  0.5s
------
 > [4/9] RUN wget -q "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip" -O tf.zip &&     unzip tf.zip &&     mv ./terraform /usr/local/bin/terraform &&     chmod +x /usr/local/bin/terraform &&     rm tf.zip:
------
Dockerfile:47
--------------------
  46 |
  47 | >>> RUN wget -q "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip" -O tf.zip && \
  48 | >>>     unzip tf.zip && \
  49 | >>>     mv ./terraform /usr/local/bin/terraform && \
  50 | >>>     chmod +x /usr/local/bin/terraform && \
  51 | >>>     rm tf.zip
  52 |
--------------------
ERROR: failed to solve: process "/bin/sh -c wget -q \"https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip\" -O tf.zip &&     unzip tf.zip &&     mv ./terraform /usr/local/bin/terraform &&     chmod +x /usr/local/bin/terraform &&     rm tf.zip" did not complete successfully: exit code: 5

排查分析

报错中的exit code:5是wget的错误码,对应网络连接失败、无法解析主机地址或请求被拦截。本地与ADO流水线的核心差异在于网络环境:ADO流水线通常拥有不受限的外网访问权限,而本地可能存在代理、防火墙、DNS解析等问题,导致无法访问Hashicorp的Terraform下载地址。

解决方案与排查步骤

1. 测试本地网络连通性

在本地终端执行以下命令,直接验证能否访问Terraform下载地址:

wget -v https://releases.hashicorp.com/terraform/1.3.1/terraform_1.3.1_linux_amd64.zip

根据输出信息判断具体问题:

  • 若提示unable to resolve host address:DNS解析失败
  • 若提示Connection timed out:网络连接超时或被防火墙拦截

2. 配置Docker Desktop代理(若本地使用代理)

如果本地网络需要通过代理访问外网,需在Docker Desktop中配置代理:

  • 打开Docker Desktop设置 → Resources → Proxies
  • 选择"Manual proxy configuration",填写HTTP/HTTPS代理地址和端口
  • 点击"Apply & Restart"重启Docker

3. 尝试使用主机网络构建

构建时指定--network host参数,让Docker容器直接使用主机网络访问外网,绕开Docker默认网桥的网络限制:

docker build --network host -t your-image-tag .

4. 替换wget为curl命令

将Dockerfile中的wget命令替换为curl,curl的网络兼容性更优,避免wget的潜在问题:

RUN curl -LO "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip" && \
    unzip terraform_${TERRAFORM_VERSION}_linux_amd64.zip && \
    mv ./terraform /usr/local/bin/terraform && \
    chmod +x /usr/local/bin/terraform && \
    rm terraform_${TERRAFORM_VERSION}_linux_amd64.zip

5. 修改Docker DNS配置

若存在DNS解析问题,手动配置Docker使用公共DNS服务器(如Google的8.8.8.8):

  • 打开Docker Desktop设置 → Docker Engine
  • 在配置文件中添加"dns": ["8.8.8.8", "8.8.4.4"]
  • 示例配置:
    {
      "builder": {
        "gc": {
          "defaultKeepStorage": "20GB",
          "enabled": true
        }
      },
      "dns": ["8.8.8.8", "8.8.4.4"],
      "experimental": false,
      "features": {
        "buildkit": true
      }
    }
    
  • 点击"Apply & Restart"重启Docker

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:55:55