Last active
July 21, 2025 06:58
-
-
Save githubfoam/6d8765827c21e9677254a29cd876b162 to your computer and use it in GitHub Desktop.
docker-compose cheat sheet
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#===================================================================== | |
Why the user and data persisted despite docker compose down -v | |
Even though you used docker compose down -v (which does delete named or anonymous volumes created by Docker Compose), your docker-compose.yml includes this line | |
volumes: | |
- "./librenms:/data" | |
The ./librenms folder on your host stores LibreNMS data. | |
When you did docker compose down -v, Docker: | |
Removed volumes it manages (like the db volume, if it's named). | |
Did not touch bind-mounted folders like ./librenms. | |
So when you brought the containers up again with docker compose up -d --build, the container saw: | |
"Oh, the /data directory already has previous config, users, etc." | |
#===================================================================== | |
docker compose exec librenms mysql -h db -u librenms -p | |
#===================================================================== | |
$ docker compose up -d --build | |
#===================================================================== | |
docker compose up -d --build | |
write /var/lib/docker/tmp/GetImageBlob1490303091: no space left on device | |
df -h | |
/dev/sda8 71G 11G 57G 16% /home | |
/dev/sda5 6.4G 6.3G 0 100% /var | |
explain how to fix this, there is much space on /home | |
Docker stores all its images, containers, volumes, and temporary files under /var/lib/docker by default. Since /var is a small (6.4 GB) and full partition, Docker cannot proceed — even though /home has plenty of space | |
Solution: Move Docker storage to /home | |
We will move Docker's storage location from /var/lib/docker to /home/docker-data (or another directory with more space). | |
tep-by-step Instructions | |
1. Stop Docker | |
sudo systemctl stop docker | |
2. Create a new directory on /home | |
sudo mkdir -p /home/docker-data | |
3. Move existing Docker data (if any) | |
sudo rsync -aP /var/lib/docker/ /home/docker-data/ | |
4. Configure Docker to use the new location | |
Create or edit Docker’s daemon config: | |
sudo mkdir -p /etc/docker | |
sudo nano /etc/docker/daemon.json | |
Add: | |
{ | |
"data-root": "/home/docker-data" | |
} | |
5. Restart Docker | |
sudo systemctl start docker | |
6. Verify | |
Run: | |
docker info | grep "Docker Root Dir" | |
You should see: | |
Docker Root Dir: /home/docker-data | |
💡 Optional: Clean up old data | |
Once you're sure everything works, you can delete the old directory: | |
sudo rm -rf /var/lib/docker | |
#===================================================================== | |
docker compose -f docker-compose.json up #use JSON instead of YAML compose file | |
#===================================================================== | |
docker compose -f ~/hello_world/docker-compose.yml build | |
docker compose -f ~/hello_world/docker-compose.yml up -d | |
docker compose ps # Lists containers. | |
docker compose stop | |
docker compose start # Starts existing containers for a service. | |
docker compose stop # Stops running containers without removing them. | |
docker compose pause # Pauses running containers of a service. | |
docker compose unpause # Unpauses paused containers of a service | |
docker compose up #Builds, (re)creates, starts, and attaches to containers for a service | |
docker compose up -d #Create docker image and run container in the background | |
docker compose down # Stops containers and removes containers, networks, volumes, and images created by up. | |
docker compose down -v # tear down the containers and volumes | |
docker compose --version | |
docker compose ps | |
docker compose images #List images used by the created containers | |
docker compose stop | |
docker compose run web | |
docker compose down | |
docker compose -f docker-compose-dev.yml up -d app1 | |
docker compose -f docker-compose-test-local.yml run --rm unit | |
docker compose -f docker-compose-test-local.yml build app -> as an alternative, define build arguments inside a Docker Compose file | |
docker compose build | |
docker compose config | |
docker compose -f docker-compose-test-local.yml up -d staging-dep | |
docker compose -f docker-compose-test-local.yml ps | |
docker compose -f docker-compose-test-local.yml run --rm staging | |
docker compose -f docker-compose-test-local.yml down | |
docker compose -f docker-compose-local.yml up -d registry | |
#===================================================================== | |
docker compose logs | |
docker compose logs -f initializer #track progress | |
docker compose logs initializer | grep "Admin password:" #obtain admin credentials | |
stream logs in real-time, use the -f (follow) flag: | |
docker compose -f librenms/docker-master/examples/compose/compose.yml logs -f | |
limit the number of lines displayed using the --tail option | |
docker compose -f librenms/docker-master/examples/compose/compose.yml logs --tail=100 | |
docker compose -f librenms/docker-master/examples/compose/compose.yml logs --timestamps | |
for a specific service | |
docker compose -f librenms/docker-master/examples/compose/compose.yml logs --timestamps web | |
View logs for all services | |
docker-compose logs | |
View logs for Nginx (web) | |
docker-compose logs web | |
save logs for analysis, redirect output | |
docker-compose logs web > web_logs.txt | |
Checking Logs of a Specific Container | |
docker ps | |
docker logs -f <container_id> | |
#===================================================================== | |
docker compose up -d #Create docker image and run container in the background | |
docker compose exec kali /bin/bash #Create docker image and run container in the background | |
#===================================================================== | |
docker build -t kalicmd . --file=/vagrant/dockerfiles/kalilinux/toolkali | |
docker compose --file /vagrant/dockerfiles/kalilinux/docker-compose.yml run kali-service | |
docker compose --file /vagrant/dockerfiles/kalilinux/docker-compose.yml ps #Lists containers | |
cat docker-compose.yml | |
version: '3' | |
services: | |
kali-service: | |
image: "kalicmd" | |
volumes: | |
- /mnt/share-kali:/share | |
- /mnt/share-kali/.bash_history:/root/.bash_history | |
#===================================================================== | |
docker compose build --no-cache #Force the execution of each step/instruction in the Dockerfile | |
docker compose build --no-cache && docker compose up -d --force-recreate #t recreate all containers | |
docker build --pull --no-cache --tag myimage:version #force rebuilding of layers already available | |
#===================================================================== | |
#===================================================================== | |
WINDOWS | |
#===================================================================== | |
docker compose version | |
#===================================================================== | |
#===================================================================== | |
#===================================================================== | |
#===================================================================== | |
#environment variable, non-default dockere file name | |
#docker-compose.yaml | |
version: '3.8' | |
services: | |
myservice: | |
build: | |
context: . | |
dockerfile: ./docker/Dockerfile.myservice | |
image: myself/myservice | |
env_file: | |
- ./var.env | |
environment: | |
- VAR_C=C | |
- VAR_D=D | |
volumes: | |
- $HOME/myfolder:/myfolder | |
ports: | |
- "5000:5000" | |
#===================================================================== | |
cat Dockerfile.test | |
cat docker-compose.test.yml | |
docker compose -f ~/hello_world/docker-compose.test.yml -p ci build | |
docker compose -f ~/hello_world/docker-compose.test.yml -p ci up -d | |
docker compose -p ci stop | |
#===================================================================== | |
Docker Compose v2 Docker compose v3 | |
Multi-host No Yes | |
Start services docker compose up -d docker stack deploy --compose-file=docker-compose.yml | |
Scale service docker compose scale = docker service scale = | |
Shutdown docker compose down docker stack rm | |
#===================================================================== | |
# docker-compose.yml | |
version: '3' | |
services: | |
web: | |
build: . | |
# build from Dockerfile | |
context: ./Path | |
dockerfile: Dockerfile | |
ports: | |
- "5000:5000" | |
volumes: | |
- .:/code | |
redis: | |
image: redis | |
#===================================================================== | |
# Builds, (re)creates, starts, and attaches to containers for a service. | |
docker compose up | |
# Stops containers and removes containers, networks, volumes, and images created by up. | |
docker compose down | |
#===================================================================== | |
web: | |
# build from Dockerfile | |
build: . | |
#===================================================================== | |
# build from custom Dockerfile | |
build: | |
context: ./dir | |
dockerfile: Dockerfile.dev | |
#===================================================================== | |
# build from image | |
image: ubuntu | |
#===================================================================== | |
ports: | |
- "3000" | |
- "8000:80" # guest:host | |
#===================================================================== | |
# expose ports to linked services (not to host) | |
expose: ["3000"] | |
#===================================================================== | |
# command to execute | |
command: bundle exec thin -p 3000 | |
command: [bundle, exec, thin, -p, 3000] | |
#===================================================================== | |
# override the entrypoint | |
entrypoint: /app/start.sh | |
entrypoint: [php, -d, vendor/bin/phpunit] | |
#===================================================================== | |
volumes: | |
- /var/lib/mysql | |
- ./_data:/var/lib/mysql | |
version: '2' | |
services: | |
cms: | |
image: <IMAGE>:<TAG> | |
ports: | |
- <LOCAL_PORT>:<CONTAINER_PORT> | |
volumes: | |
- <LOCAL_PATH>:<CONTAINER_PATH> | |
#===================================================================== | |
# join a pre-existing network | |
networks: | |
default: | |
external: | |
name: frontend | |
#===================================================================== | |
# creates a custom network called `frontend` | |
networks: | |
frontend: | |
#===================================================================== | |
# makes the `db` service available as the hostname `database` | |
# (implies depends_on) | |
links: | |
- db:database | |
- redis | |
#===================================================================== | |
# make sure `db` is alive before starting | |
depends_on: | |
- db | |
#===================================================================== | |
services: | |
web: | |
dns: 8.8.8.8 | |
dns: | |
- 8.8.8.8 | |
- 8.8.4.4 | |
#===================================================================== | |
a Bash script to automate the creation of a superuser for NetBox using Docker Compose. It uses the provided username, email, and password, and bypasses the password validation prompt. | |
#!/bin/bash | |
# Variables | |
USERNAME="admin" | |
EMAIL="[email protected]" | |
PASSWORD="Netbox2025!" | |
# Run the createsuperuser command non-interactively | |
sudo docker compose -f netbox-docker/docker-compose.yml exec netbox /opt/netbox/netbox/manage.py createsuperuser \ | |
--username "$USERNAME" \ | |
--email "$EMAIL" \ | |
--no-input || true | |
# Set password using Django shell | |
sudo docker compose -f netbox-docker/docker-compose.yml exec netbox /opt/netbox/netbox/manage.py shell -c " | |
from django.contrib.auth import get_user_model; | |
User = get_user_model(); | |
user = User.objects.get(username='$USERNAME'); | |
user.set_password('$PASSWORD'); | |
user.save(); | |
print('✅ Superuser created successfully with provided password.') | |
" | |
echo "🎉 NetBox superuser created with username '$USERNAME' and email '$EMAIL'" | |
#===================================================================== |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment