Skip to content

Docker Shell ​

Beszel uses a scratch image with no shell. This means you can't use docker exec -it <container> /bin/sh to debug from inside the container.

However, you can use the build option with a custom Dockerfile to move the binary into the base image of your choice.

Create a Dockerfile ​

Save the following as Dockerfile in the same directory as your docker-compose.yml:

dockerfile
FROM henrygd/beszel:latest as beszel

# Define the new base image
FROM alpine:latest

# Add tools (curl, telnet, traceroute, netstat, host, nslookup, dig, delv)
RUN apk add --no-cache bash curl busybox-extras bind-tools

# Copy the binary into the new image
COPY --from=beszel /beszel /beszel

ENTRYPOINT [ "/beszel" ]
CMD ["serve", "--http=0.0.0.0:8090"]
dockerfile
FROM henrygd/beszel-agent:latest as beszel

# Define the new base image
FROM alpine:latest

# Add tools (curl, telnet, traceroute, netstat, host, nslookup, dig, delv)
RUN apk add --no-cache bash curl busybox-extras bind-tools

# Copy the binary into the new image
COPY --from=beszel /agent /agent

ENTRYPOINT ["/agent"]

Update your docker-compose.yml ​

Remove the image key and add a build key to your service:

yaml
beszel:
  image: henrygd/beszel
  build: .
yaml
beszel-agent:
  image: henrygd/beszel-agent
  build: .

Restart the container and access the shell ​

bash
docker-compose up -d --build
docker exec -it <container> bash

Multiple Dockerfiles in one compose file ​

Use this approach if your hub and agent share the same compose file and you want to debug both.

Save the dockerfiles with different names, e.g. Dockerfile_hub and Dockerfile_agent and update the build key in your docker-compose.yml:

yaml
beszel:
  build:
    context: .
    dockerfile: Dockerfile_hub

beszel-agent:
  build:
    context: .
    dockerfile: Dockerfile_agent

Released under the MIT License