From c4d49272eaf597ad66de50471b8b831cc9949191 Mon Sep 17 00:00:00 2001
From: PGijsbers
Date: Thu, 22 Jan 2026 15:52:33 +0100
Subject: [PATCH 1/6] Bump REST API version
---
docker-compose.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docker-compose.yaml b/docker-compose.yaml
index e4e9507..e87aed3 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -58,7 +58,7 @@ services:
php-api:
profiles: ["all", "minio", "rest-api", "frontend", "evaluation-engine"]
- image: openml/php-rest-api:v1.2.1
+ image: openml/php-rest-api:v1.2.4
container_name: "openml-php-rest-api"
ports:
- "8080:80" # also known as /api (nginx)
From d1673a0b93f5bd6b573765b86cff9cdfbe5a5ad4 Mon Sep 17 00:00:00 2001
From: PGijsbers
Date: Mon, 26 Jan 2026 15:10:15 +0100
Subject: [PATCH 2/6] Update routing to same location for internal and external
requests
NGINX is now also listens to port 8000 on the docker network.
This is an important step to being able to start these `services`
and have them function as a local test server for openml-python
among others.
---
config/arff-to-pq-converter/Dockerfile | 2 +-
config/arff-to-pq-converter/config | 2 +-
config/database/update.sh | 4 ++--
config/nginx/Dockerfile | 4 ++--
config/nginx/nginx.conf | 4 ++--
config/php/.env | 7 ++++---
docker-compose.yaml | 16 +++++++++++++++-
7 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/config/arff-to-pq-converter/Dockerfile b/config/arff-to-pq-converter/Dockerfile
index d164e90..58cc6b7 100644
--- a/config/arff-to-pq-converter/Dockerfile
+++ b/config/arff-to-pq-converter/Dockerfile
@@ -8,4 +8,4 @@ RUN apt update && apt upgrade -y
RUN apt -y install cron
RUN chmod +x /etc/cron.d/openml
-RUN crontab -u unprivileged-user /etc/cron.d/openml
\ No newline at end of file
+RUN crontab -u unprivileged-user /etc/cron.d/openml
diff --git a/config/arff-to-pq-converter/config b/config/arff-to-pq-converter/config
index 9e32e2f..acbc67d 100644
--- a/config/arff-to-pq-converter/config
+++ b/config/arff-to-pq-converter/config
@@ -1 +1 @@
-server=http://nginx:80/api/v1/xml
+server=http://nginx:8000/api/v1/xml
diff --git a/config/database/update.sh b/config/database/update.sh
index 0239211..b962e11 100755
--- a/config/database/update.sh
+++ b/config/database/update.sh
@@ -2,7 +2,7 @@
# Change the filepath of openml.file
# from "https://www.openml.org/data/download/1666876/phpFsFYVN"
# to "http://minio:9000/datasets/0000/0001/phpFsFYVN"
-mysql -hdatabase -uroot -pok -e 'UPDATE openml.file SET filepath = CONCAT("http://minio:9000/datasets/0000/", LPAD(id, 4, "0"), "/", SUBSTRING_INDEX(filepath, "/", -1)) WHERE extension="arff";'
+mysql -hdatabase -uroot -pok -e 'UPDATE openml.file SET filepath = CONCAT("http://localhost:8000/datasets/0000/", LPAD(id, 4, "0"), "/", SUBSTRING_INDEX(filepath, "/", -1)) WHERE extension="arff";'
# Update openml.expdb.dataset with the same url
mysql -hdatabase -uroot -pok -e 'UPDATE openml_expdb.dataset DS, openml.file FL SET DS.url = FL.filepath WHERE DS.did = FL.id;'
@@ -28,4 +28,4 @@ mysql -hdatabase -uroot -pok -Dopenml_expdb -e 'INSERT IGNORE INTO dataset_statu
mysql -hdatabase -uroot -pok -Dopenml_expdb -e 'DELETE FROM dataset_status WHERE did = 2 AND status = "deactivated";'
# Temporary fix in case the database missed the kaggle table. The PHP Rest API expects the table to be there, while indexing.
-mysql -hdatabase -uroot -pok -Dopenml_expdb -e 'CREATE TABLE IF NOT EXISTS `kaggle` (`dataset_id` int(11) DEFAULT NULL, `kaggle_link` varchar(500) DEFAULT NULL)'
\ No newline at end of file
+mysql -hdatabase -uroot -pok -Dopenml_expdb -e 'CREATE TABLE IF NOT EXISTS `kaggle` (`dataset_id` int(11) DEFAULT NULL, `kaggle_link` varchar(500) DEFAULT NULL)'
diff --git a/config/nginx/Dockerfile b/config/nginx/Dockerfile
index 7498879..7a7ab50 100644
--- a/config/nginx/Dockerfile
+++ b/config/nginx/Dockerfile
@@ -3,6 +3,6 @@ FROM nginx:alpine
WORKDIR /etc/nginx
COPY ./nginx.conf ./conf.d/default.conf
COPY ./shared.conf ./shared.conf
-EXPOSE 80
+EXPOSE 8000
ENTRYPOINT [ "nginx" ]
-CMD [ "-g", "daemon off;" ]
\ No newline at end of file
+CMD [ "-g", "daemon off;" ]
diff --git a/config/nginx/nginx.conf b/config/nginx/nginx.conf
index 5316b1f..7dcd3d7 100644
--- a/config/nginx/nginx.conf
+++ b/config/nginx/nginx.conf
@@ -3,7 +3,7 @@
server {
- listen 80;
+ listen 8000;
server_name localhost;
resolver 127.0.0.11;
@@ -48,4 +48,4 @@ server {
set $upstream_f http://frontend:5000;
proxy_pass $upstream_f/$1$is_args;
}
-}
\ No newline at end of file
+}
diff --git a/config/php/.env b/config/php/.env
index 3a641c8..77c1058 100644
--- a/config/php/.env
+++ b/config/php/.env
@@ -1,6 +1,6 @@
API_KEY=AD000000000000000000000000000000
-BASE_URL=http://php-api:80/
-MINIO_URL=http://minio:9000/
+BASE_URL=http://localhost:8000/
+MINIO_URL=http://localhost:8000/minio/
DB_HOST_OPENML=database:3306
DB_HOST_EXPDB=database:3306
DB_USER_OPENML=root
@@ -10,4 +10,5 @@ DB_PASS_EXPDB_WRITE=ok
DB_USER_EXPDB_READ=root
DB_PASS_EXPDB_READ=ok
ES_URL=elasticsearch:9200
-ES_PASSWORD=default
\ No newline at end of file
+ES_PASSWORD=default
+INDEX_ES_DURING_STARTUP=true
diff --git a/docker-compose.yaml b/docker-compose.yaml
index e87aed3..21f720b 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -54,7 +54,11 @@ services:
context: config/nginx
container_name: openml-nginx
ports:
- - "8000:80"
+ - "8000:8000"
+ networks:
+ default:
+ ipv4_address: 172.28.0.2
+
php-api:
profiles: ["all", "minio", "rest-api", "frontend", "evaluation-engine"]
@@ -78,6 +82,8 @@ services:
start_interval: 5s
timeout: 3s
interval: 1m
+ extra_hosts:
+ - "localhost=172.28.0.2"
email-server:
profiles: ["all", "frontend"]
@@ -133,6 +139,8 @@ services:
depends_on:
php-api:
condition: service_healthy
+ extra_hosts:
+ - "localhost=172.28.0.2"
croissants:
profiles: ["all"]
@@ -161,3 +169,9 @@ services:
networks:
default:
name: openml-services
+ ipam:
+ driver: default
+ config:
+ - subnet: 172.28.0.0/16
+ ip_range: 172.28.1.0/24
+
From 456586a261183abaf6145425693aa242a1056202 Mon Sep 17 00:00:00 2001
From: PGijsbers
Date: Wed, 28 Jan 2026 17:19:02 +0100
Subject: [PATCH 3/6] Update configuration to work with local database and
localhost
---
config/evaluation-engine/.env | 4 ++--
config/evaluation-engine/run-cron.sh | 6 +++++-
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/config/evaluation-engine/.env b/config/evaluation-engine/.env
index 882ba22..17480f2 100644
--- a/config/evaluation-engine/.env
+++ b/config/evaluation-engine/.env
@@ -1,4 +1,4 @@
-CONFIG=api_key=AD000000000000000000000000000000;server=http://php-api:80/
+CONFIG=api_key=abc;server=http://php-api:80/
JAVA=/usr/bin/java
JAR=/usr/local/lib/evaluation-engine.jar
-LOG_DIR=/logs
\ No newline at end of file
+LOG_DIR=/logs
diff --git a/config/evaluation-engine/run-cron.sh b/config/evaluation-engine/run-cron.sh
index cff7a2f..004e656 100755
--- a/config/evaluation-engine/run-cron.sh
+++ b/config/evaluation-engine/run-cron.sh
@@ -1,6 +1,10 @@
#!/bin/sh
+# We need to remove the default 127.0.0.1 localhost map to
+# ensure the remap to the static nginx ip address is respected.
+sed -i '/^127.0.0.1.*localhost/d' /etc/hosts
+
printenv | grep -v HOME >> /etc/environment
touch /cron.log
-/usr/sbin/crond -l 4 && tail -f /cron.log
\ No newline at end of file
+/usr/sbin/crond -l 4 && tail -f /cron.log
From 4ab1036d2e0415b49d3826c858b8afb3075b0c37 Mon Sep 17 00:00:00 2001
From: PGijsbers
Date: Thu, 29 Jan 2026 15:54:18 +0100
Subject: [PATCH 4/6] Use a more reliable way to overwrite the /etc/hosts file
---
config/evaluation-engine/run-cron.sh | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/config/evaluation-engine/run-cron.sh b/config/evaluation-engine/run-cron.sh
index 004e656..5c1b03d 100755
--- a/config/evaluation-engine/run-cron.sh
+++ b/config/evaluation-engine/run-cron.sh
@@ -2,7 +2,13 @@
# We need to remove the default 127.0.0.1 localhost map to
# ensure the remap to the static nginx ip address is respected.
-sed -i '/^127.0.0.1.*localhost/d' /etc/hosts
+# Updating /etc/hosts in place isn't always allowed ("Resource Busy"),
+# directly overwriting it instead seems to bypass that protection.
+cp /etc/hosts /etc/hosts.new
+sed -i '/^127.0.0.1.*localhost/d' /etc/hosts.new
+sed -i -E 's/^(::1\t)localhost (.*)$/\1\2/g' /etc/hosts.new
+cat /etc/hosts.new > /etc/hosts
+rm /etc/hosts.new
printenv | grep -v HOME >> /etc/environment
From 273d8e9afda4ec2687a21e2a0017c21015e97756 Mon Sep 17 00:00:00 2001
From: PGijsbers
Date: Thu, 29 Jan 2026 17:06:49 +0100
Subject: [PATCH 5/6] Remove commented out code
---
config/database/update.sh | 23 -----------------------
1 file changed, 23 deletions(-)
diff --git a/config/database/update.sh b/config/database/update.sh
index b962e11..5b49e33 100755
--- a/config/database/update.sh
+++ b/config/database/update.sh
@@ -6,26 +6,3 @@ mysql -hdatabase -uroot -pok -e 'UPDATE openml.file SET filepath = CONCAT("http:
# Update openml.expdb.dataset with the same url
mysql -hdatabase -uroot -pok -e 'UPDATE openml_expdb.dataset DS, openml.file FL SET DS.url = FL.filepath WHERE DS.did = FL.id;'
-
-
-
-
-
-# Create the data_feature_description TABLE. TODO: can we make sure this table exists already?
-mysql -hdatabase -uroot -pok -Dopenml_expdb -e 'CREATE TABLE IF NOT EXISTS `data_feature_description` (
- `did` int unsigned NOT NULL,
- `index` int unsigned NOT NULL,
- `uploader` mediumint unsigned NOT NULL,
- `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `description_type` enum("plain", "ontology") NOT NULL,
- `value` varchar(256) NOT NULL,
- KEY `did` (`did`,`index`),
- CONSTRAINT `data_feature_description_ibfk_1` FOREIGN KEY (`did`, `index`) REFERENCES `data_feature` (`did`, `index`) ON DELETE CASCADE ON UPDATE CASCADE
-)'
-
-# SET dataset 1 to active (used in unittests java)
-mysql -hdatabase -uroot -pok -Dopenml_expdb -e 'INSERT IGNORE INTO dataset_status VALUES (1, "active", "2024-01-01 00:00:00", 1)'
-mysql -hdatabase -uroot -pok -Dopenml_expdb -e 'DELETE FROM dataset_status WHERE did = 2 AND status = "deactivated";'
-
-# Temporary fix in case the database missed the kaggle table. The PHP Rest API expects the table to be there, while indexing.
-mysql -hdatabase -uroot -pok -Dopenml_expdb -e 'CREATE TABLE IF NOT EXISTS `kaggle` (`dataset_id` int(11) DEFAULT NULL, `kaggle_link` varchar(500) DEFAULT NULL)'
From 7ac2879381ea4f864dfcce35b2b33fbcefd41a9c Mon Sep 17 00:00:00 2001
From: PGijsbers
Date: Thu, 29 Jan 2026 17:07:40 +0100
Subject: [PATCH 6/6] Point to most recent images
---
docker-compose.yaml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/docker-compose.yaml b/docker-compose.yaml
index 21f720b..079e643 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -1,6 +1,6 @@
services:
database:
- image: "openml/test-database:20240105"
+ image: "openml/test-database:v0.1.20260129"
container_name: "openml-test-database"
environment:
MYSQL_ROOT_PASSWORD: ok
@@ -114,7 +114,7 @@ services:
minio:
profiles: ["all", "minio", "evaluation-engine"]
- image: openml/test-minio:v0.1.20241110
+ image: openml/test-minio:v0.1.20260129
container_name: "openml-minio"
ports:
- "9000:9000" # also known as /data (nginx)
@@ -165,6 +165,8 @@ services:
depends_on:
php-api:
condition: service_healthy
+ extra_hosts:
+ - "localhost=172.28.0.2"
networks:
default: