{"id":13703514,"url":"https://github.com/reitzig/texlive-docker","last_synced_at":"2026-02-01T09:01:00.175Z","repository":{"id":35427324,"uuid":"212058154","full_name":"reitzig/texlive-docker","owner":"reitzig","description":"Docker images for TeXlive that easily adjust to your needs","archived":false,"fork":false,"pushed_at":"2026-01-28T10:05:44.000Z","size":98,"stargazers_count":30,"open_issues_count":3,"forks_count":7,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-29T01:38:43.670Z","etag":null,"topics":["docker","docker-image","latex","texlive"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reitzig.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-10-01T09:29:25.000Z","updated_at":"2026-01-21T12:01:53.000Z","dependencies_parsed_at":"2024-01-03T06:42:57.879Z","dependency_job_id":"a31a3d14-42b5-4f98-86a8-ce4f7856546f","html_url":"https://github.com/reitzig/texlive-docker","commit_stats":null,"previous_names":[],"tags_count":67,"template":false,"template_full_name":null,"purl":"pkg:github/reitzig/texlive-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reitzig%2Ftexlive-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reitzig%2Ftexlive-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reitzig%2Ftexlive-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reitzig%2Ftexlive-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reitzig","download_url":"https://codeload.github.com/reitzig/texlive-docker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reitzig%2Ftexlive-docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28974246,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T08:16:14.655Z","status":"ssl_error","status_checked_at":"2026-02-01T08:06:51.373Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-image","latex","texlive"],"created_at":"2024-08-02T21:00:56.138Z","updated_at":"2026-02-01T09:01:00.141Z","avatar_url":"https://github.com/reitzig.png","language":"Dockerfile","funding_links":[],"categories":["Docker Images"],"sub_categories":[],"readme":"# TeXlive Docker Images\n\nYet another attempt at coming up with working _and_ generally applicable\nDocker images for [TeXlive][texlive].\n\nThe basic concept is to provide small-ish base images which\ninstall additional packages from CTAN if and when needed.\n\nThese images attempt to cover the following use cases:\n\n- Replace local TeXlive installations.\n- Build LaTeX documents in CI/CD pipelines.\n- Build legacy documents with old package versions.\n\nWe currently publish the following images based on different selections\nfrom the TeXlive collections suggested by [the installer][install-tl]; \nfrom smaller to larger:\n\n- [reitzig/texlive-minimal][minimal-dockerhub] ([profile][minimal-profile])\n- [reitzig/texlive-base][base-dockerhub] ([profile][base-profile])\n- [reitzig/texlive-base-luatex][base-luatex-dockerhub] ([profile][base-luatex-profile])\n\nWe also provide PoCs to demonstrate that more involved applications can\nbe built on top of the base images provided here:\n\n- [Serve a static set of pre-built documents.][demo-static-serve]\n\u003c!-- TODO - devcontainers --\u003e\n\u003c!-- TODO - LaTeX CI pipeline: https://github.com/reitzig/dh-tools --\u003e\n\u003c!-- TODO - LaTeX build server. --\u003e\n\u003c!-- TODO - Document generation server. --\u003e\n\n## Usage\n\nThe fastest way to build a document at hand (once) is this:\n\n```bash\ndocker run --rm \\\n    --volume `pwd`:/work/src:ro \\\n    --volume `pwd`/out:/work/out \\\n    reitzig/texlive-base-luatex \\\n    work lualatex hello_world.tex\n```\n\nNote:\n\n- This assumes that all TeXlive packages beyond what is contained in the\n  `texlive-base-luatex` image are listed in `Texlivefile`.\n  You can also use image `reitzig/texlive-full` instead if you are happy\n  with downloading a (way) larger image.\n- This may overwrite files in `out`. Chose a folder name that you currently\n  do not use.\n\nSee the scripts in [`examples`][examples] for other ways to use the images.\n\n### Dependencies\n\nPlace a file called `Texlivefile`  with a list of required CTAN packages,\none name per line, in the source directory.\nThe container will install all packages on that list before running the work command.\n\n---\n⚠️ Installing dependencies in this way will stop working once a new version of TeXlive is released,\nwith an error like this:\n\n\u003e tlmgr: Local TeX Live (2023) is older than remote repository (2024).\n\nIf you need to keep using an older image for a little while, \nyou can override the repository by setting environment variable \n`TEXLIVE_REPOSITORY` to a value like\n```\nhttps://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2023/tlnet-final\n```\nThis feature has been available since 2024.2;\nsee \n  [reitzig/texlive-docker#18.2022953222](https://github.com/reitzig/texlive-docker/issues/18#issuecomment-2022953222)\nfor hints on how to backport it to older images.\n\n⚠️ Note that most CTAN mirrors do not maintain historic versions\n(cf. [tex.SE#460132](https://tex.stackexchange.com/questions/460132/historic-tex-live-distributions-https-sftp-mirror)),\nso keep in mind that widespread use of this workaround _will_ stress those few mirrors that do.\nWe strongly recommend upgrading to the latest TeXlive version as soon as possible!\n\n\u003c!-- TODO: provide example--\u003e\nℹ️ That said, an alternative is to maintain custom Docker images with historic package versions\u003c!--;\nsee [here](TODO) for an example--\u003e.\nThis approach completely avoids the need for running `tlmgr` at runtime,\nso repository freeze does not impact your builds.\n\n---\n\n### Parameters\n\nYou can adjust some defaults of the\n    [main container script][entrypoint]\nby\n    [setting environment variables][docker-set-env]\n\n- `BUILDSCRIPT` (default: `build.sh`)  \n  If present, the given script will be executed unless a work command is specified.\n- `TEXLIVEFILE` (default: `Texlivefile`)  \n  The file to read dependencies from.\n- `OUTPUT` (default: `*.pdf *.log`)  \n  Shell pattern for all files that should be copied from the working to the output directory.\n\n### Debugging\n\nAll output of the work command is collected in a single folder; extract it with:\n\n```bash\ndocker cp $container:/work/tmp ./\n```\n\n## Build\n\nRun\n\n```bash\ndocker build -t texlive-base-luatex --build-arg \"profile=base-luatex\" .\n```\n\nto build an image locally. Exchange `base-luatex` for any of the profile names in\n[`profiles`][profiles] to start from another baseline.\n\n### Customization\n\nIf you repeatedly need the same exact set of dependencies or even sources, it\nmight make sense to create your own TeXlive Docker image.\nThere are two ways to go about that:\n\n- Extend one of the existing images using your own Dockerfile (see [example][custom-dockerfile]);\n  install additional TeXlive (or even Alpine) packages, copy source files\n  or additional scripts into the appropriate folders, fix the work command, or ...\n- Use [install-tl][install-tl] to create your own TeXlive installation profile. Make sure to\n\n    1. select platform `x86_64-linuxmusl` and\n    2. manually change line `binary_x86_64-linux 1` in the resulting profile file\n       to `binary_x86_64-linux 0`.\n       \u003c!-- Yup, it's a workaround; musl-only installs are apparently not well-supported.\n            See a matching note in Dockerfile. Any advice is appreciated. --\u003e\n\n   If you want to use your profile across different TeXlive versions,\n   replace all occurrences of the TeXlive version (e.g. `2019`) with `${tlversion}`.\n\n   Copy the final file to [`profiles`][profiles] and run the regular build command.\n\n\u003c!-- Note: Repo-relative links will be rewritten by update-dockerhub-info.sh before pushing to Docker Hub --\u003e\n[examples]: examples\n[profiles]: profiles\n[entrypoint]: entrypoint.sh\n[custom-dockerfile]: examples/Dockerfile\n[demo-static-serve]: demo/static-document-server\n\n[minimal-dockerhub]: https://hub.docker.com/r/reitzig/texlive-minimal\n[minimal-profile]: profiles/minimal.profile\n[base-dockerhub]: https://hub.docker.com/r/reitzig/texlive-base\n[base-profile]: profiles/base.profile\n[base-luatex-dockerhub]: https://hub.docker.com/r/reitzig/texlive-base-luatex\n[base-luatex-profile]: profiles/base-luatex.profile\n\n[docker-set-env]: https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file\n[install-tl]: https://www.tug.org/texlive/acquire-netinstall.html\n[texlive]: https://www.tug.org/texlive/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freitzig%2Ftexlive-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freitzig%2Ftexlive-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freitzig%2Ftexlive-docker/lists"}