| name | docker-testing |
| description | Test Docker and Podman container operations for Rivetr. Use when debugging container builds, testing runtime detection, or troubleshooting deployment issues. |
| allowed-tools | Bash, Read |
Container Runtime Testing for Rivetr
Runtime Detection
Check which runtime is available:
docker --version
docker info
podman --version
podman info
Docker Socket
Verify Docker socket access:
ls -la /var/run/docker.sock
ls -la ~/.docker/run/docker.sock
Build Types
Rivetr supports multiple build methods:
1. Dockerfile (default)
docker build -t rivetr-app:latest .
docker build --build-arg NODE_ENV=production -t rivetr-app:latest .
docker build -f docker/Dockerfile.prod -t rivetr-app:latest .
2. Nixpacks
curl -sSL https://nixpacks.com/install.sh | bash
nixpacks build . --name my-app
nixpacks build . --name my-app --pkgs nodejs-18_x
nixpacks plan . --format dockerfile > Dockerfile
3. Railpack (Nixpacks successor)
cargo install railpack
curl -sSL https://railpack.io/install.sh | bash
railpack build . --name my-app
railpack build . --name my-app --install "npm ci" --build "npm run build"
4. Cloud Native Buildpacks (pack)
brew install buildpacks/tap/pack
curl -sSL https://github.com/buildpacks/pack/releases/download/v0.33.0/pack-v0.33.0-linux.tgz | tar -xz
pack build my-app --builder heroku/builder:24
pack build my-app --builder paketobuildpacks/builder-jammy-base
5. Static Site Builder
docker build -f- . <<EOF
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
EOF
Test Container Build
Create a test Dockerfile:
FROM alpine:latest
RUN echo "Hello from Rivetr test"
CMD ["echo", "Container started successfully"]
Build manually:
docker build -t rivetr-test:latest .
Test Container Run
docker run -d --name rivetr-test-container -p 3000:3000 rivetr-test:latest
docker run -d --name rivetr-test \
--cpus=1 \
--memory=512m \
--restart=unless-stopped \
-p 3000:3000 \
rivetr-test:latest
docker ps -a | grep rivetr-test
docker logs rivetr-test-container
docker logs -f rivetr-test-container
docker stats rivetr-test-container --no-stream
docker stop rivetr-test-container
docker rm rivetr-test-container
Test Health Check
docker run -d --name health-test -p 8080:8080 nginx
curl http://localhost:8080/
curl --max-time 5 http://localhost:8080/health
docker stop health-test && docker rm health-test
Bollard API Test
The Rivetr DockerRuntime uses Bollard. Test the connection:
use bollard::Docker;
#[tokio::test]
async fn test_docker_connection() {
let docker = Docker::connect_with_local_defaults().unwrap();
let info = docker.ping().await;
assert!(info.is_ok());
}
#[tokio::test]
async fn test_container_stats() {
let docker = Docker::connect_with_local_defaults().unwrap();
let options = bollard::container::StatsOptions {
stream: false,
one_shot: true,
};
let stats = docker.stats("container_id", Some(options)).next().await;
println!("{:?}", stats);
}
Common Issues
Permission Denied
sudo usermod -aG docker $USER
groups | grep docker
Docker Not Running
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker
Podman Rootless
podman run -d --name test alpine sleep 300
podman ps
systemctl --user enable podman.socket
systemctl --user start podman.socket
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
Build Fails with OOM
free -h
Image Not Found After Build
docker images | grep rivetr
docker build . 2>&1 | tail -5
docker image inspect rivetr-app:latest
Cleanup Commands
docker ps -a | grep rivetr | awk '{print $1}' | xargs -r docker rm -f
docker images | grep rivetr | awk '{print $3}' | xargs -r docker rmi -f
docker image prune -f
docker system prune -f
docker system prune -a --volumes -f
Container Logs for Debugging
docker logs --tail 100 CONTAINER_ID
docker logs -f CONTAINER_ID
docker logs -t CONTAINER_ID
docker logs --since 5m CONTAINER_ID