Add Dockerfile and README

Prebuilt glibc image for pass-cli, so Alpine/musl-based CI jobs (e.g.
harmless-easy-bobcat's docker:cli-based deploy workflows) can pull and run
it without hitting missing glibc symbols.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-19 21:05:36 +01:00
co-authored by Claude Sonnet 5
parent 6876039bea
commit d534a21b09
2 changed files with 80 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
# pass-cli, glibc-linked, for hosts/CI where only an Alpine (musl) base is
# otherwise available. pass-cli's Linux binary needs real glibc symbols
# (fcntl64, __res_init, ...) that Alpine's gcompat/libc6-compat don't shim,
# so it can't run in e.g. the docker:cli image directly.
#
# ENTRYPOINT is pass-cli itself, so `docker run this-image <args>` behaves
# like `pass-cli <args>`. Callers who need to run their own script against
# pass-cli instead (login, fetch a note, parse it, etc.) override the
# entrypoint: `docker run --entrypoint sh this-image /path/to/script.sh`.
FROM debian:bookworm-slim
ARG PASS_CLI_VERSION=2.3.3
ARG PASS_CLI_SHA256=b5b49a8b3fd0af8830c0c1979f28ea0c90ccece73f59023a8bca8245d4b68da9
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl \
&& curl -fsSL -o /usr/local/bin/pass-cli \
"https://proton.me/download/pass-cli/${PASS_CLI_VERSION}/pass-cli-linux-x86_64" \
&& echo "${PASS_CLI_SHA256} /usr/local/bin/pass-cli" | sha256sum -c - \
&& chmod +x /usr/local/bin/pass-cli \
&& apt-get purge -y curl \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/*
# No kernel keyring in a container -- store the session on disk instead.
ENV PROTON_PASS_KEY_PROVIDER=fs
ENTRYPOINT ["pass-cli"]
+51
View File
@@ -1 +1,52 @@
# pass-cli Docker image # pass-cli Docker image
A prebuilt, glibc-based container image for [Proton Pass
CLI](https://protonpass.github.io/pass-cli/) (`pass-cli`).
## Why this exists
`pass-cli`'s official Linux binary is dynamically linked against glibc. It
does not run under Alpine/musl, even with `gcompat` or `libc6-compat`
installed — some of the symbols it needs (`fcntl64`, `__res_init`, ...) are
glibc-specific and aren't shimmed. There's no official musl build and no
official pass-cli image, so CI jobs that otherwise run in an Alpine-based
container (like `docker:cli`) can't just `apk add pass-cli` or run the
binary directly.
This image is a small `debian:bookworm-slim` base with a pinned,
checksum-verified `pass-cli` binary installed, published so that kind of job
can pull it and run `pass-cli` (or a script that calls it) without needing
its own glibc environment.
## Usage
The image's `ENTRYPOINT` is `pass-cli` itself:
```sh
docker run --rm code.aneur.in/cloud/pass-cli:<tag> --version
```
To run your own script against `pass-cli` instead (login, fetch an item,
parse the result, etc.), override the entrypoint and mount the script in:
```sh
docker run --rm \
-e PROTON_PASS_PERSONAL_ACCESS_TOKEN \
-v "$PWD/my-script.sh:/script.sh:ro" \
--entrypoint sh \
code.aneur.in/cloud/pass-cli:<tag> \
/script.sh
```
`PROTON_PASS_KEY_PROVIDER` is set to `fs` in the image by default, since a
container has no kernel keyring for `pass-cli`'s usual session storage.
See [code.aneur.in/cloud/cloud](https://code.aneur.in/cloud/cloud)'s
`bin/ci/` and `.gitea/workflows/*.yml` for a real caller of this image.
## Updating the pinned version
`PASS_CLI_VERSION` and `PASS_CLI_SHA256` are build args at the top of the
`Dockerfile`. Bump both together — get the new version's hash from
`https://proton.me/download/pass-cli/versions.json`, or download the binary
and check it yourself with `sha256sum`.