我在使用docker buildx构建armv7 docker映像时遇到了一个非常奇怪的问题,但在armv7硬件上本地构建时却没有。
这是一个非常简单的docker图像:
FROM ubuntu:20.04
ARG ARCH
RUN apt-get update &&
apt-get install -y curl wget
# Install Go
ENV GOLANG_VERSION 1.15.8
RUN set -eux;
url="https://golang.org/dl/go${GOLANG_VERSION}.linux-${ARCH}.tar.gz";
wget -O go.tgz "$url";
tar -C /usr/local -xzf go.tgz;
rm go.tgz;
export PATH="/usr/local/go/bin:$PATH";
go version
我可以在macos和raspberrypi上构建arm64的映像。在为armv7构建它时没有这样的运气。
我正在使用buildx在macos上构建映像,如下所示:
docker buildx build --platform linux/arm/v7 -t test:armv7 --build-arg ARCH=armv6l .
连接到golang.org时出现证书错误失败:
#7 0.378 Resolving golang.org (golang.org)... 142.250.185.113, 2a00:1450:4001:80f::2011
#7 0.448 Connecting to golang.org (golang.org)|142.250.185.113|:443... connected.
#7 0.682 ERROR: cannot verify golang.org's certificate, issued by 'CN=GTS CA 1O1,O=Google Trust Services,C=US':
#7 0.682 Unable to locally verify the issuer's authority.
#7 0.688 To connect to golang.org insecurely, use `--no-check-certificate'.
但是,如果我在armv7 (raspberry pi 2b)上本地构建完全相同的映像,它就可以正常工作:
docker build -t test:armv7 --build-arg ARCH=armv6l .
不用说,我很困惑为什么一个能工作,而另一个不能。
添加到wget命令不检查ssl证书的-k
参数
为你
FROM ubuntu:20.04
ARG ARCH
RUN apt-get update &&
apt-get install -y curl wget
# Install Go
ENV GOLANG_VERSION 1.15.8
RUN set -eux;
url="https://golang.org/dl/go${GOLANG_VERSION}.linux-${ARCH}.tar.gz";
wget -k -O go.tgz "$url";
tar -C /usr/local -xzf go.tgz;
rm go.tgz;
export PATH="/usr/local/go/bin:$PATH";
go version
最好的方法是安装证书包。在apt-get install -y curl wget ca-certificates