Skip to main content
Gate provides official Docker images that are optimized for containerized deployments. Choose between the standard image or the JRE variant for Bedrock support.

Image Variants

Gate offers two Docker image variants to suit different use cases:

Standard Image

ghcr.io/minekube/gate:latestMinimal distroless image for most use cases. Smaller footprint and enhanced security.

JRE Variant

ghcr.io/minekube/gate/jre:latestIncludes Java Runtime Environment. Required for Bedrock Edition support with Geyser.
Use the JRE variant (ghcr.io/minekube/gate/jre:latest) if you need:
  • Bedrock Edition support (cross-play with mobile, console, Windows Bedrock)
  • Gate’s managed Geyser mode
  • Java runtime in your container
For all other use cases, use the standard image.

Version Tags

Gate images support multiple version tags:
  • latest - Latest stable release (recommended)
  • 0.42.2 - Specific version tags
  • 6d3671c - Commit SHA tags for edge builds
Every commit to the main branch is built and pushed with both latest and the commit SHA tag.

Docker Run

Basic Usage

Run Gate with default settings:
docker run -it --rm ghcr.io/minekube/gate:latest
Flags explained:
  • -it - Interactive mode with pseudo-TTY (see logs in real-time)
  • --rm - Automatically remove container when it exits
  • -d - Use instead of -it to run in detached mode

With Configuration File

Mount your custom config.yml:
docker run -it --rm \
  -v $(pwd)/config.yml:/config.yml \
  -p 25565:25565 \
  ghcr.io/minekube/gate:latest
The JRE variant example includes UDP port 19132 for Bedrock Edition connections.
Get a complete config file from the repository.

With Minekube Connect

Integrate with Minekube Connect for managed hosting:
docker run -it --rm \
  -v $(pwd)/config.yml:/config.yml \
  -e CONNECT_TOKEN=your_token_here \
  ghcr.io/minekube/gate:latest
The CONNECT_TOKEN environment variable takes precedence over connect.json file.

Docker Compose

Basic Setup

Create a docker-compose.yml file:
services:
  gate:
    image: ghcr.io/minekube/gate:latest
    container_name: gate
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./config.yml:/config.yml
      # - ./connect.json:/connect.json  # Optional: Minekube Connect
Start the services:
docker-compose up -d
View logs:
docker-compose logs -f gate
Stop the services:
docker-compose down

Complete Example with Minecraft Servers

Gate includes a complete example that configures Gate with two Minecraft servers:
1

Clone the repository

git clone https://github.com/minekube/gate.git
cd gate/.examples/docker-compose
2

Review the configuration

The example includes:
  • Gate proxy with network configuration
  • Two Pufferfish servers (server-0, server-1)
  • Volume mounts for server data
docker-compose.yml
version: "3.8"

services:
  gate:
    image: ghcr.io/minekube/gate:latest
    container_name: gate
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./config.yml:/config.yml
  server-0:
    image: itzg/minecraft-server
    container_name: server-0
    environment:
      EULA: "true"
      TYPE: "PUFFERFISH"
      ONLINE_MODE: "false"
    ports:
      - "25566:25565"
    volumes:
      - ./serverdata0:/data
    restart: unless-stopped
  server-1:
    image: itzg/minecraft-server
    container_name: server-1
    environment:
      EULA: "true"
      TYPE: "PUFFERFISH"
      ONLINE_MODE: "false"
    ports:
      - "25567:25565"
    volumes:
      - ./serverdata1:/data
    restart: unless-stopped
3

Start the network

docker-compose up
4

Connect and test

  • Join at localhost:25565
  • Use /server server-0 or /server server-1 to switch between servers
  • Server files are in serverdata0/ and serverdata1/ directories

Podman

Gate works seamlessly with Podman as a Docker alternative:
podman run -it --rm ghcr.io/minekube/gate:latest
For docker-compose files, use:
podman-compose up

Troubleshooting

If you see:
Unable to find image 'ghcr.io/minekube/gate:latest' locally
docker: Error response from daemon: Head "https://ghcr.io/v2/minekube/gate/manifests/latest": denied.
You may be logged in with an expired GitHub token. Solution:
docker logout ghcr.io
GitHub Container Registry doesn’t require authentication for public images. An expired token is worse than no token.
Check logs for errors:
docker logs <container_name>
Common causes:
  • Invalid configuration file
  • Port already in use
  • Missing required volumes
Verify:
  • Ports are correctly mapped (-p 25565:25565)
  • Firewall allows connections
  • network_mode: host is used (easier for beginners) or ports are properly exposed
  • Container is running: docker ps
Restart the container after config changes:
docker-compose restart gate
# or
docker restart <container_name>

Best Practices

Use specific version tags

Pin to specific versions in production instead of latest:
image: ghcr.io/minekube/gate:0.42.2

Mount configuration as read-only

Prevent accidental modifications:
volumes:
  - ./config.yml:/config.yml:ro

Use docker-compose for multi-container setups

Manage Gate and backend servers together with defined dependencies and networking.

Set resource limits

Control memory and CPU usage:
deploy:
  resources:
    limits:
      memory: 512M

Next Steps

Kubernetes Deployment

Scale Gate in Kubernetes clusters

Configuration

Customize Gate for your network

Build docs developers (and LLMs) love