我的主机是带有 WSL2 的 Windows 11。
我安装了 Rancher Desktop v0.7.1
使用 containerd(nerdctl(v 0.15.0)) 选项和 Kubernetes v1.23.1(latest)
然后我尝试构建以下 Dockerfile
# syntax=docker/dockerfile:experimental
#FROM openjdk:11 as builder <-- This one also fails.
FROM adoptopenjdk:11-jre-hotspot as builder
ENV NODE_ENV=development
WORKDIR /workspace/my-app
COPY . /workspace/my-app
RUN --mount=type=cache,target=/root/.gradle ./gradlew --no-watch-fs --no-daemon clean build -x test
然后我得到以下异常
> [builder 4/4] RUN --mount=type=cache,target=/root/.gradle ./gradlew --no-watch-fs --no-daemon clean build -x test:
#10 0.585 Downloading https://services.gradle.org/distributions/gradle-7.0.2-bin.zip
#10 130.6
#10 130.6 Exception in thread "main" java.net.ConnectException: Connection timed out (Connection timed out)
#10 130.6 at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
#10 130.6 at java.base/java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
#10 130.6 at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
#10 130.6 at java.base/java.net.AbstractPlainSocketImpl.connect(Unknown Source)
#10 130.6 at java.base/java.net.SocksSocketImpl.connect(Unknown Source)
#10 130.6 at java.base/java.net.Socket.connect(Unknown Source)
#10 130.6 at java.base/sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
#10 130.6 at java.base/sun.security.ssl.BaseSSLSocketImpl.connect(Unknown Source)
#10 130.6 at java.base/sun.net.NetworkClient.doConnect(Unknown Source)
#10 130.6 at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
#10 130.6 at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
#10 130.6 at java.base/sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
#10 130.6 at java.base/sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
#10 130.6 at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
#10 130.6 at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
#10 130.6 at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
#10 130.6 at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
#10 130.6 at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
#10 130.6 at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
#10 130.6 at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
#10 130.6 at org.gradle.wrapper.Download.downloadInternal(Download.java:67)
#10 130.6 at org.gradle.wrapper.Download.download(Download.java:52)
#10 130.6 at org.gradle.wrapper.Install$1.call(Install.java:62)
#10 130.6 at org.gradle.wrapper.Install$1.call(Install.java:48)
#10 130.6 at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69)
#10 130.6 at org.gradle.wrapper.Install.createDist(Install.java:48)
#10 130.6 at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)
#10 130.6 at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:63)
------
Dockerfile:11
--------------------
9 |
10 | COPY . /workspace/my-app
11 | >>> RUN --mount=type=cache,target=/root/.gradle ./gradlew --no-watch-fs --no-daemon clean build -x test
--------------------
error: failed to solve: executor failed running [/bin/sh -c ./gradlew --no-watch-fs --no-daemon clean build -x test]: exit code: 1
FATA[0139] unrecognized image format
如果我连接到容器并运行同一行,则 gradlew 下载 gradle 应用程序,它可以毫无问题地构建。
这是我的网络配置:
root@TEST:~/mcd-git/mcd-core# nerdctl network ls
root@TEST:~/mcd-git/mcd-core# nerdctl network ls --namespace k8s.io
NETWORK ID NAME FILE
0 bridge
host
none
如果在 k8s.io 命名空间中执行相同的构建,我会得到相同的错误。
如果我使用 Docker 在不同的 WSL 发行版中执行相同的命令,那么它会正确构建。
我可能缺少代理配置或 CNI 配置,但我不知道如何修复它,感谢任何帮助。