From a1fa6221d8b0cc526eec0c1330e0e53953aa1d8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Petazzoni?= Date: Sun, 9 Nov 2025 19:44:34 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Update=20dockercoins=20for?= =?UTF-8?q?=20IPv6=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We want to be able to run on IPv6-only clusters (as well as legacy IPv4 clusters, as well as DualStack clusters). This requires minor changes in the code, because in multiple places, we were binding listening sockets explicitly to 0.0.0.0. We change this to :: instead, and in some cases, we make it easier to change that if needed (e.g. through environment variables). --- .../{docker-compose.yml => compose.yml} | 12 +++--- dockercoins/hasher/Dockerfile | 7 ++-- dockercoins/hasher/hasher.rb | 1 - dockercoins/rng/Dockerfile | 6 ++- dockercoins/rng/rng.py | 2 +- dockercoins/webui/Dockerfile | 11 ++--- dockercoins/webui/webui.js | 42 +++++++++++-------- dockercoins/worker/Dockerfile | 3 +- 8 files changed, 47 insertions(+), 37 deletions(-) rename dockercoins/{docker-compose.yml => compose.yml} (67%) diff --git a/dockercoins/docker-compose.yml b/dockercoins/compose.yml similarity index 67% rename from dockercoins/docker-compose.yml rename to dockercoins/compose.yml index ebfc81a8..3a877bb4 100644 --- a/dockercoins/docker-compose.yml +++ b/dockercoins/compose.yml @@ -1,26 +1,24 @@ -version: "2" - services: + rng: build: rng ports: - - "8001:80" + - "8001:80" hasher: build: hasher ports: - - "8002:80" + - "8002:80" webui: build: webui ports: - - "8000:80" + - "8000:80" volumes: - - "./webui/files/:/files/" + - "./webui/files/:/files/" redis: image: redis worker: build: worker - diff --git a/dockercoins/hasher/Dockerfile b/dockercoins/hasher/Dockerfile index 707ecd12..79c08ef7 100644 --- a/dockercoins/hasher/Dockerfile +++ b/dockercoins/hasher/Dockerfile @@ -1,7 +1,8 @@ FROM ruby:alpine +WORKDIR /app RUN apk add --update build-base curl RUN gem install sinatra --version '~> 3' -RUN gem install thin --version '~> 1' -ADD hasher.rb / -CMD ["ruby", "hasher.rb"] +RUN gem install thin +COPY hasher.rb . +CMD ["ruby", "hasher.rb", "-o", "::"] EXPOSE 80 diff --git a/dockercoins/hasher/hasher.rb b/dockercoins/hasher/hasher.rb index 28a929f3..79b570b9 100644 --- a/dockercoins/hasher/hasher.rb +++ b/dockercoins/hasher/hasher.rb @@ -2,7 +2,6 @@ require 'digest' require 'sinatra' require 'socket' -set :bind, '0.0.0.0' set :port, 80 post '/' do diff --git a/dockercoins/rng/Dockerfile b/dockercoins/rng/Dockerfile index 34cf43b2..ec58a56a 100644 --- a/dockercoins/rng/Dockerfile +++ b/dockercoins/rng/Dockerfile @@ -1,5 +1,7 @@ FROM python:alpine +WORKDIR /app RUN pip install Flask -COPY rng.py / -CMD ["python", "rng.py"] +COPY rng.py . +ENV FLASK_APP=rng FLASK_RUN_HOST=:: FLASK_RUN_PORT=80 +CMD ["flask", "run"] EXPOSE 80 diff --git a/dockercoins/rng/rng.py b/dockercoins/rng/rng.py index b327e922..713dc330 100644 --- a/dockercoins/rng/rng.py +++ b/dockercoins/rng/rng.py @@ -28,5 +28,5 @@ def rng(how_many_bytes): if __name__ == "__main__": - app.run(host="0.0.0.0", port=80, threaded=False) + app.run(port=80) diff --git a/dockercoins/webui/Dockerfile b/dockercoins/webui/Dockerfile index 7667bb70..97487521 100644 --- a/dockercoins/webui/Dockerfile +++ b/dockercoins/webui/Dockerfile @@ -1,7 +1,8 @@ -FROM node:4-slim -RUN npm install express@4 -RUN npm install redis@3 -COPY files/ /files/ -COPY webui.js / +FROM node:23-alpine +WORKDIR /app +RUN npm install express +RUN npm install morgan +RUN npm install redis@5 +COPY . . CMD ["node", "webui.js"] EXPOSE 80 diff --git a/dockercoins/webui/webui.js b/dockercoins/webui/webui.js index 5b2bdc5e..eb5f17e0 100644 --- a/dockercoins/webui/webui.js +++ b/dockercoins/webui/webui.js @@ -1,26 +1,34 @@ -var express = require('express'); -var app = express(); -var redis = require('redis'); +import express from 'express'; +import morgan from 'morgan'; +import { createClient } from 'redis'; -var client = redis.createClient(6379, 'redis'); -client.on("error", function (err) { - console.error("Redis error", err); -}); +var client = await createClient({ + url: "redis://redis", + socket: { + family: 0 + } +}) + .on("error", function (err) { + console.error("Redis error", err); + }) + .connect(); + +var app = express(); + +app.use(morgan('common')); app.get('/', function (req, res) { res.redirect('/index.html'); }); -app.get('/json', function (req, res) { - client.hlen('wallet', function (err, coins) { - client.get('hashes', function (err, hashes) { - var now = Date.now() / 1000; - res.json( { - coins: coins, - hashes: hashes, - now: now - }); - }); +app.get('/json', async(req, res) => { + var coins = await client.hLen('wallet'); + var hashes = await client.get('hashes'); + var now = Date.now() / 1000; + res.json({ + coins: coins, + hashes: hashes, + now: now }); }); diff --git a/dockercoins/worker/Dockerfile b/dockercoins/worker/Dockerfile index cfdc0747..bed40453 100644 --- a/dockercoins/worker/Dockerfile +++ b/dockercoins/worker/Dockerfile @@ -1,5 +1,6 @@ FROM python:alpine +WORKDIR /app RUN pip install redis RUN pip install requests -COPY worker.py / +COPY worker.py . CMD ["python", "worker.py"]