I created a Dockerfile to run a minecraft server in a container.
Here is the Dockerfile
FROM eclipse-temurin:21.0.2_13-jre
RUN adduser minecraft
RUN su - minecraft
WORKDIR /home/minecraft
RUN wget https://api.papermc.io/v2/projects/paper/versions/1.8.8/builds/445/downloads/paper-1.8.8-445.jar
RUN echo "eula=true" > eula.txt
COPY ./server.properties ./
EXPOSE 25565
CMD [ "java", "-Xmx2G", "-Xms2G", "-jar", "paper-1.8.8-445.jar", "noguis" ]
It works fine when I run it as a container, but when running it in Kubernetes I get this:
$ kubectl logs minecraft-deployment-6b68cc8695-6qzv4
Downloading vanilla jar...
Failed to download vanilla jar
java.net.UnknownHostException: launcher.mojang.com
at java.base/sun.nio.ch.NioSocketImpl.connect(Unknown Source)
at java.base/java.net.SocksSocketImpl.connect(Unknown Source)
at java.base/java.net.Socket.connect(Unknown Source)
at java.base/sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
at java.base/sun.security.ssl.BaseSSLSocketImpl.connect(Unknown Source)
at java.base/sun.net.NetworkClient.doConnect(Unknown Source)
at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
at java.base/sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
at java.base/sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at java.base/java.net.URL.openStream(Unknown Source)
at io.papermc.paperclip.Paperclip.checkVanillaJar(Paperclip.java:191)
at io.papermc.paperclip.Paperclip.checkPaperJar(Paperclip.java:122)
at io.papermc.paperclip.Paperclip.setupEnv(Paperclip.java:95)
at io.papermc.paperclip.Paperclip.main(Paperclip.java:49)
By the way, Iām creating them from a js script. The .yaml files are defined as json objects.
The deployment yaml
{
apiVersion: 'apps/v1',
kind: 'Deployment',
metadata: {
name: 'minecraft-deployment',
},
spec: {
replicas: 1,
selector: {
matchLabels: {
app: 'game-server',
},
},
template: {
metadata: {
labels: {
app: 'game-server',
game: 'minecraft'
},
},
spec: {
containers: [
{
name: 'minecraft',
image: 'minecraft',
imagePullPolicy: 'Never'
},
],
},
},
},
}
The service .yaml
{
kind: "Service",
apiVersion: "v1",
metadata: {
name: "minecraft-service",
},
spec: {
selector: {
app: "minecraft",
},
ports: [{
protocol: "TCP",
port: 25565,
targetPort: 25565,
}],
type: "LoadBalancer"
}
}
And, I donāt know if it matters, but here is how I create them:
const createService = await k8sApi.createNamespacedService('default', service)
const createDeployment = await k8sAppsApi.createNamespacedDeployment('default', deployment)
Can someone help me figure this out?
Thanks in advanced
Iām using windows 11, Docker Desktop 4.29.0 (145265) and Kubernetes v1.29.2