Build:
- 1
- 0
2026-01-23 09:55.00: New job: Build Dockerfile using linux-x86_64 in
[https://github.com/ocaml/ocaml.org.git#refs/heads/tutorial-docker (495e08d968dd410de789b602a201fd3651359ef7)]
2026-01-23 09:55.00: Using cache hint "https://github.com/ocaml/ocaml.org.git-Dockerfile"
2026-01-23 09:55.00: Waiting for resource in pool OCluster
2026-01-23 09:55.00: Waiting for worker…
2026-01-23 09:55.00: Got resource from pool OCluster
Building on toxis.caelum.ci.dev
All commits already cached
HEAD is now at 495e08d96 Add tutorial on OCaml docker images
#1 [internal] load build definition from Dockerfile
#1 sha256:b396fae5bd03ff5792e02986ee9e0538b68442f00fc36bbff477e95488dc3e5d
#1 transferring dockerfile: 1.95kB done
#1 DONE 0.1s
#2 [internal] load .dockerignore
#2 sha256:93faacf3f474df78e6bbfac28b9ba1d357e9363965e8b297ed7c8b6b65ff8735
#2 transferring context: 162B done
#2 DONE 0.1s
#4 [internal] load metadata for docker.io/ocaml/opam:alpine-3.21-ocaml-5.2
#4 sha256:adb77ba5903636e19010d6e980da8ef64fc1162e9ceb2356622fea673543cc17
#4 DONE 0.7s
#3 [internal] load metadata for docker.io/library/alpine:3.21
#3 sha256:680708d0a2d071063e702bfb78c62d7a5ee566073d7ccaca73b737c8e87b4180
#3 DONE 0.8s
#13 [internal] load build context
#13 sha256:9d70f8210c3ca51711be6503817529d13765c5a269f83190a3070f8c5412723c
#13 DONE 0.0s
#5 [stage-1 1/9] FROM docker.io/library/alpine:3.21@sha256:5405e8f36ce1878720f71217d664aa3dea32e5e5df11acbf07fc78ef5661465b
#5 sha256:75cc10f4d2a9654547a28990d04684278f09d91281cac804380030d40a148b4e
#5 DONE 0.0s
#7 [build 1/12] FROM docker.io/ocaml/opam:alpine-3.21-ocaml-5.2@sha256:35aa52606745f4c3ce85f9ceb1d8c2ddce42fb97e8f6876c476cd137a51e468e
#7 sha256:f1e308402fd1fa2d6ecff2dc80b778d4fe2365b32d84ca8d10e5778f6833aa90
#7 DONE 0.0s
#13 [internal] load build context
#13 sha256:9d70f8210c3ca51711be6503817529d13765c5a269f83190a3070f8c5412723c
#13 transferring context: 263.83MB 4.1s
#13 transferring context: 355.72MB 5.1s done
#13 DONE 5.2s
#11 [build 5/12] RUN cd ~/opam-repository && git reset --hard 584630e7a7e27e3cf56158696a3fe94623a0cf4f && opam update
#11 sha256:9f85bc2f851768bd36732b77db992e1c67c3dbe07fadd057d2e2d9292819cfc7
#11 CACHED
#12 [build 6/12] WORKDIR /home/opam
#12 sha256:1ee32e4a33a728f26a1ad50aeb53ad089f539a22ef5a89393bd0aa75fe24c945
#12 CACHED
#14 [build 7/12] COPY --chown=opam ocamlorg.opam .
#14 sha256:b3397f7caf2cb741012522b53464d03acae21dd9f6bbb743fe1196b35a94cd59
#14 CACHED
#8 [build 2/12] RUN sudo apk -U upgrade --no-cache && sudo apk add --no-cache autoconf curl-dev gmp-dev inotify-tools libev-dev oniguruma-dev openssl-dev
#8 sha256:26b368f1f3ff3c5754efeaa48ae6ebaeaee4cff38756526f27db5aef624f6fc4
#8 CACHED
#9 [build 3/12] RUN sudo mv /usr/bin/opam-2.2 /usr/bin/opam && opam update
#9 sha256:bd205c3339a77bb815b261d438a142859c5ad085e9042708aedd488c4a5167e6
#9 CACHED
#10 [build 4/12] RUN opam option --global 'archive-mirrors+="https://opam.ocaml.org/cache"'
#10 sha256:b52f4ceb5b3d3c6a796bf061d16f05acb83903b6c5ee0d54daca211492794f7e
#10 CACHED
#15 [build 8/12] RUN opam install . --deps-only
#15 sha256:316119193a93959fa0af16cf2809c67cbdc1b10edb12f40eb3ec2f41fe23ae1b
#15 CACHED
#16 [build 9/12] COPY --chown=opam . .
#16 sha256:bb4d5c442318a98e014a870bcd0f42762f482d55a80545a277c60eeab71e4a36
#16 DONE 2.6s
#17 [build 10/12] RUN opam exec -- dune build @install --profile=release
#17 sha256:9a65010c2ecd8585987fa16539a001a8006fa9073cace6d6f5ae91010e75f8b3
#17 20.05
#=#=#
####### 9.8%
################# 24.9%
######################## 34.6%
################################# 46.2%
#################################### 50.7%
############################################# 63.2%
##################################################### 74.7%
############################################################ 84.5%
#################################################################### 95.4%
####################################################################### 99.7%
######################################################################## 100.0%
#17 25.22 Browserslist: caniuse-lite is outdated. Please run:
#17 25.22 npx update-browserslist-db@latest
#17 25.22 Why you should do it regularly: https://github.com/browserslist/update-db#readme
#17 25.22
#17 25.22 Rebuilding...
#17 25.22
#17 25.22 Done in 3319ms.
#17 30.71 File "src/ocamlorg_data/dune", lines 310-320, characters 0-246:
#17 30.71 310 | (rule
#17 30.71 311 | (target tutorial.ml)
#17 30.71 312 | (deps
#17 30.71 313 | (source_tree %{workspace_root}/data/tutorials)
#17 30.71 314 | (:ood_gen %{workspace_root}/tool/ood-gen/bin/gen.exe))
#17 30.71 315 | (action
#17 30.71 316 | (chdir
#17 30.71 317 | %{workspace_root}
#17 30.71 318 | (with-stdout-to
#17 30.71 319 | %{target}
#17 30.71 320 | (run %{ood_gen} tutorial)))))
#17 30.71 ood-gen: internal error, uncaught exception:
#17 30.71 Ood_gen.Exn.Decode_error("data/tutorials/platform/2_11_docker.md : expected metadata at the top of the file tutorials/platform/2_11_docker.md. Got \n## The Main Repository: `ocaml/opam`\n\nThe official OCaml Docker images are hosted at **[hub.docker.com/r/ocaml/opam](https://hub.docker.com/r/ocaml/opam)**.\n\n**Note:** The older repositories `ocaml/opam2`, `ocaml/opam2-staging`, `ocurrent/opam`, and `ocaml/ocaml` are **no longer updated**. Use `ocaml/opam` for the latest images.\n\n## What's Inside Each Image\n\nEach image contains the following:\n- The latest release of `opam`\n- A global `opam` switch with the base image specific compiler pre-installed\n- A local copy of [`opam-repository`](https://github.com/ocaml/opam-repository) from when the base-image was created\n- A default user called `opam`\n\nEach image also includes two Dockerfiles showing how it was built:\n- `/Dockerfile.opam` - the first stage installing the opam binary\n- `/Dockerfile.ocaml` - builds on the first stage by installing a particular opam switch\n\n## Tag Format\n\nImages are tagged with distribution and OCaml version:\n\n```bash\n# Full explicit tag\ndocker run --rm -it ocaml/opam:debian-11-ocaml-4.14\n\n# Shorter aliases (latest versions)\ndocker run --rm -it ocaml/opam:debian # Latest Debian + latest OCaml\ndocker run --rm -it ocaml/opam:ubuntu-lts # Latest Ubuntu LTS\ndocker run --rm -it ocaml/opam:alpine # Latest Alpine\n```\n\nThe `latest` tag is the latest release of OCaml running on the latest version of Debian (Debian is used as it has the widest architecture support for OCaml).\n\n## Supported Distributions\n\n- **Debian** (various versions)\n- **Ubuntu** (including `ubuntu-lts` for latest LTS)\n- **Alpine**\n- **Fedora**\n- **openSUSE**\n- **Arch Linux** (rolling release, just `archlinux` tag)\n- **Windows**: `windows-mingw-*` (MinGW-w64) and `windows-msvc-*` (Visual Studio)\n\n## Supported Architectures\n\nThe images are multi-arch images including support for 32 and 64 bit where possible and `arm`, `x86` and `ppc`.\n\n## OCaml Compiler Variants\n\nBeyond standard OCaml versions, there are variants like:\n- Flambda enabled (`ocaml-option-flambda`)\n- Frame pointers enabled (`ocaml-option-fp`)\n\n## How They're Built\n\nThis is an OCurrent pipeline that builds Docker images for OCaml, for various combinations of Linux distribution, Windows version, OCaml version and architecture.\n\nThe images are **updated weekly** via an automated pipeline at [images.ci.ocaml.org](https://images.ci.ocaml.org).\n\n## Usage Notes\n\nThis is important. If you use the base-images as a base to build upon in a Dockerfile (i.e. `FROM ocaml/opam...`) this will be run as the `opam` user. This can cause permission errors if you try to build somewhere that needs root access. You can either change the user to `root` before building anything or ensure you build somewhere you have access to such as `/home/opam`.\n\nWhen copying files into the image, use:\n```dockerfile\nCOPY --chown=opam <SRCs> <DST>\n```\n\n## Special Tags\n\n- **`archive`** - Contains a snapshot of all source archives for opam-repository (useful for setting up a local cache)\n- **SHA256 hashes** - Used by OCaml-CI for reproducible builds\n\n## Primary Use Cases\n\nThese images are primarily intended for OCaml's Continuous Testing systems, and can be a little quirky to use as development images.\n\nThey're used by:\n- **ocaml-ci** - for testing OCaml projects\n- **opam-repo-ci** - for testing opam package submissions\n- **opam-health-check** - for monitoring package health\n\n## Example: Basic Usage\n\n```bash\n# Interactive session with latest Debian + OCaml\ndocker run --rm -it ocaml/opam\n\n# Specific distribution and OCaml version\ndocker run --rm -it ocaml/opam:ubuntu-22.04-ocaml-5.1\n\n# Mount your project\ndocker run --rm -it -v $(pwd):/home/opam/project ocaml/opam\n```\n\n## Pinning Images\n\nInstead of using tags (which can change when images are updated weekly), you can **pin** to an exact immutable image using its SHA256 digest:\n\n```dockerfile\n# Unpinned - may change over time\nFROM ocaml/opam:debian-11-ocaml-4.14\n\n# Pinned - guaranteed to be identical every time\nFROM ocaml/opam:debian-11-ocaml-4.14@sha256:167218493be2d3a2f93c9546fc73f249c6911ee5c8998874a2038677bfbd6fb2\n```\n\n**Why pin?**\n\n- **Reproducibility**: When you pull an image by its digest, you are guaranteed to get the exact same image every time, regardless of when or by whom it was pushed to the registry.\n- **Debugging**: OCaml-CI uses pinning so you can reproduce a failing build with the exact same environment\n- **Security**: If the image changes for any reason, the mathematics of cryptography guarantees that the digest also changes.\n\n**Finding a digest:**\n```bash\ndocker images --digests ocaml/opam\n```\n\n**Trade-off**: Pinned images don't get automatic updates, so you must manually update the digest to receive security patches.\n")
#17 30.71 Raised at Ocamlorg__Import.Result.get_ok.(fun) in file "src/global/import.ml", line 106, characters 55-70
#17 30.71 Called from Ood_gen__Tutorial.all in file "tool/ood-gen/lib/tutorial.ml", line 105, characters 2-46
#17 30.71 Called from Ood_gen__Tutorial.template in file "tool/ood-gen/lib/tutorial.ml", line 148, characters 39-45
#17 30.71 Called from Dune__exe__Gen.cmds.(fun) in file "tool/ood-gen/bin/gen.ml", line 43, characters 48-61
#17 30.71 Called from Cmdliner_term.app.(fun) in file "cmdliner_term.ml", line 24, characters 19-24
#17 30.71 Called from Cmdliner_eval.run_parser in file "cmdliner_eval.ml", line 35, characters 37-44
#17 ERROR: executor failed running [/bin/sh -c opam exec -- dune build @install --profile=release]: exit code: 1
------
> [build 10/12] RUN opam exec -- dune build @install --profile=release:
------
executor failed running [/bin/sh -c opam exec -- dune build @install --profile=release]: exit code: 1
docker-build failed with exit-code 1
2026-01-23 09:55.50: Job failed: Failed: Build failed