Hostinger Docker Management
Docker infrastructure for srv759970.hstgr.cloud (30+ containers).
Server Info
1. Status & Monitoring
Quick Status
ssh srv759970 'docker ps --format "table {{.Names}}\t{{.Status}}"'
ssh srv759970 'docker system df'
Container Stats
ssh srv759970 'docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.CPUPerc}}"'
Logs
ssh srv759970 'docker logs container-name --tail 50'
ssh srv759970 'docker logs -f container-name' # Follow
ssh srv759970 'docker logs container-name --tail 100 --timestamps'
2. Container Operations
Start/Stop/Restart
ssh srv759970 'docker restart container-name'
ssh srv759970 'docker stop container-name'
ssh srv759970 'docker start container-name'
Deploy Service
ssh srv759970 << 'EOF'
cd /opt/service-name
docker-compose down
docker-compose up -d
docker-compose logs --tail 20
EOF
Force Recreate (for config changes)
ssh srv759970 'cd /opt/service && docker-compose down && docker-compose up -d --force-recreate'
Execute Command in Container
ssh srv759970 'docker exec -it container-name bash'
ssh srv759970 'docker exec container-name ls /app'
ssh srv759970 'docker exec -u root container-name chown -R www-data:www-data /var/www/html'
3. WordPress Docker
Containers
| Container |
Port |
Usage |
| wordpress-site |
9xxx |
WordPress + PHP |
| mysql-site |
3306 |
Database |
| wp-cli-site |
- |
WP-CLI commands |
Common Commands
# Status
ssh srv759970 'docker ps | grep wordpress'
# Logs
ssh srv759970 'docker logs wordpress-site --tail 50'
# Restart
ssh srv759970 'cd /opt/wordpress-site && docker-compose restart'
# WP-CLI
ssh srv759970 'docker exec wp-cli-site wp plugin list'
ssh srv759970 'docker exec wp-cli-site wp user list'
# Fix permissions
ssh srv759970 'docker exec -u root wordpress-site chown -R www-data:www-data /var/www/html'
4. Image Management
List Images
ssh srv759970 'docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"'
Cleanup
# Dangling images (safe)
ssh srv759970 'docker image prune -f'
# Old images (>30 days)
ssh srv759970 'docker image prune -a --filter "until=720h"'
# Unused volumes
ssh srv759970 'docker volume prune -f'
Build & Deploy
ssh srv759970 << 'EOF'
cd /opt/service
docker-compose build --no-cache
docker-compose up -d --force-recreate
docker image prune -f
EOF
5. Troubleshooting
ContainerConfig KeyError
docker-compose down && docker-compose up -d --force-recreate
Network has active endpoints
# Skip down, use only:
docker-compose up -d --force-recreate
Wrong CMD in container
docker-compose build --no-cache
docker-compose up -d
Container keeps restarting
# Check logs
docker logs container-name --tail 100
# Check exit code
docker inspect container-name | grep ExitCode
# Check memory limits
docker stats --no-stream container-name
Permission denied (scp)
Use cat with heredoc instead:
ssh srv759970 "cat > /opt/service/Dockerfile" << 'EOF'
# Dockerfile content here
EOF
6. Optimization
Multi-stage Dockerfile Template
# Stage 1: Build
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Stage 2: Runtime
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY . .
EXPOSE 8000
CMD ["python", "main.py"]
Best Practices
- Order layers: deps before code
- Use multi-stage builds
- Combine RUN commands
- Add .dockerignore
- Use --no-cache-dir for pip
Quick Reference
# Status
ssh srv759970 'docker ps && docker system df'
# Restart service
ssh srv759970 'cd /opt/service && docker-compose restart'
# Logs
ssh srv759970 'docker logs container --tail 50'
# Cleanup
ssh srv759970 'docker image prune -f && docker volume prune -f'
# Full redeploy
ssh srv759970 'cd /opt/service && docker-compose down && docker-compose build --no-cache && docker-compose up -d'