Ir al contenido

Docker

La imagen es ghcr.io/jmrplens/arcane-mcp, que el flujo de publicación publica para cada versión, y también docker.io/jmrplens/arcane-mcp, con el mismo digest, cuando esté configurado el repositorio de Docker Hub. Es el binario estático sobre gcr.io/distroless/static-debian12:nonroot: sin shell ni gestor de paquetes, con el usuario sin privilegios 65532. No se publica nada hasta la primera versión; consulta Instalación.

Docker, o cualquier entorno que ejecute imágenes OCI (Podman, containerd), en un host o máquina virtual linux/amd64 o linux/arm64 (incluido Docker Desktop en macOS y Windows).

EtiquetaSignificado
X.Y.ZUna versión; nunca se mueve
X.YSe mueve con una versión de esa línea menor solo cuando es la más reciente de todas
latestLa versión más reciente; una versión de mantenimiento (anterior a la más reciente) no mueve ni X.Y ni latest

Cada etiqueta es un índice multiplataforma para linux/amd64 y linux/arm64; Docker descarga el de tu máquina.

Ventana de terminal
docker pull ghcr.io/jmrplens/arcane-mcp:X.Y.Z
docker run --rm ghcr.io/jmrplens/arcane-mcp:X.Y.Z --version

Hasta la primera versión, construye la imagen desde un clon del repositorio: docker build -t arcane-mcp ., y usa arcane-mcp como nombre de imagen en lo que sigue.

El cliente arranca el contenedor en cada sesión y habla con él por la entrada y la salida estándar:

{
"mcpServers": {
"arcane": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "ARCANE_URL", "-e", "ARCANE_API_KEY", "ghcr.io/jmrplens/arcane-mcp:X.Y.Z"],
"env": {
"ARCANE_URL": "https://arcane.example.com",
"ARCANE_API_KEY": "<your Arcane API key>"
}
}
}
}
  • Mantén -i (el protocolo viaja por la entrada estándar) y nunca añadas -t ni -d.
  • -e NOMBRE sin valor reenvía esa variable desde el entorno con el que el cliente arranca docker, así que los valores se quedan en env y fuera de los argumentos. Cada ajuste adicional (ARCANE_MCP_TOOL_SURFACE, ARCANE_MCP_READ_ONLY…) necesita su propio -e NOMBRE y un valor en env.
  • ARCANE_URL tiene que ser alcanzable desde dentro del contenedor: allí localhost es el propio contenedor. Usa el nombre del host, host.docker.internal (Docker Desktop) o --network host (Linux).
  • El contenedor no ve un fichero .env de tu directorio de trabajo.

La entrada Docker de cada cliente está en Configuración de clientes.

Con ARCANE_MCP_HTTP_ADDR definida, el contenedor sirve Streamable HTTP en /mcp en lugar de stdio, para varios clientes a la vez:

Ventana de terminal
export ARCANE_MCP_HTTP_TOKEN=$(openssl rand -hex 32)
docker run -d --name arcane-mcp -p 127.0.0.1:8080:8080 \
-e ARCANE_URL=https://arcane.example.com \
-e ARCANE_MCP_HTTP_ADDR=:8080 \
-e ARCANE_MCP_HTTP_ALLOW_PLAINTEXT=true \
-e ARCANE_MCP_HTTP_TOKEN \
ghcr.io/jmrplens/arcane-mcp:X.Y.Z

ARCANE_MCP_HTTP_ALLOW_PLAINTEXT=true dice que el HTTP sin cifrar en el :8080 del contenedor es intencionado: dentro del contenedor el servidor escucha en todas las interfaces, pero el puerto se publica solo en el loopback del anfitrión. Sin él, el servidor registra un aviso al arrancar; consulta HTTP sin cifrar y el modo endurecido.

Los ficheros de Compose junto a Arcane, los proxies inversos, TLS y los sockets unix están en Despliegue HTTP.

La imagen tiene un HEALTHCHECK que ejecuta arcane-mcp --probe cada 30 segundos: un contenedor HTTP pasa a healthy en cuanto responde /healthz, y un contenedor stdio cuenta como sano mientras se ejecuta (no tiene servidor al que preguntar). No hay nada que configurar; consulta Escucha, sondas y parada.

Usa una etiqueta X.Y.Z en todo aquello de lo que dependas, o fija el digest que publica la versión: ghcr.io/jmrplens/arcane-mcp:X.Y.Z@sha256:<digest> (la entrada del MCP Registry fija la imagen así). latest se mueve con cada versión.

El índice y las imágenes de las dos plataformas están firmados sin claves con cosign y llevan atestaciones de procedencia SLSA y de SBOM SPDX. Las órdenes están en Verificar una versión.

Descarga la etiqueta nueva y cámbiala en la entrada del cliente (con --rm, cada sesión arranca un contenedor nuevo); para un servicio HTTP, vuelve a crear el contenedor con la etiqueta nueva. Para eliminar la imagen: docker image rm ghcr.io/jmrplens/arcane-mcp:X.Y.Z.