Docker Container on Startup

/usr/local/bin/check_and_run_containers.sh

#!/bin/sh

# Function to wait for the Docker daemon to be ready
wait_for_docker() {
    echo "Waiting for Docker daemon to be ready..."
    while ! docker info >/dev/null 2>&1; do
        echo -n "."
        sleep 1
    done
    echo "Docker daemon is ready."
}

# Check if a container is running
is_container_running() {
    container_name=$1
    docker ps --format '{{.Names}}' | grep -q "^${container_name}$"
}

is_network_existing() {
    network_name=$1
    docker network ls --format '{{.Name}}' | grep -q "^${network_name}$"
}

# Remove old stopped container if it exists
remove_old_container() {
    container_name=$1
    if docker ps -a --format '{{.Names}}' | grep -q "^${container_name}$"; then
        echo "Removing old container ${container_name}..."
        docker rm ${container_name}
    fi
}

# Create the pihole_lan network if it doesn't exist
create_pihole_lan_network() {
    echo "Creating pihole_lan network..."
    docker network create \
        --driver bridge \
        --subnet 10.1.0.0/24 \
        --gateway 10.1.0.1 \
        pihole_lan
}

# Run the dnsmasq container if it's not running
start_dnsmasq() {
    echo "Starting dnsmasq (lan) container..."
    remove_old_container "dnsmasq_lan"
    docker run -d --name dnsmasq_lan --network host -v "/home/tom/docker/dnsmasq.lan/dnsmasq.conf:/etc/dnsmasq.conf" --cap-add=NET_ADMIN --restart unless-stopped dnsmasq_lan
}

# Run the pihole container if it's not running
start_pihole() {
    echo "Starting pihole (lan) container..."
    remove_old_container "pihole_lan"
    docker run -d --name pihole_lan --network pihole_lan --ip 10.1.0.2 -e TZ='Australia/Sydney' -e WEBPASSWORD='secret' -v "/home/tom/docker/pihole.lan/etc-pihole:/etc/pihole" -v "/home/tom/docker/pihole.lan/etc-dnsmasq.d:/etc/dnsmasq.d" --restart unless-stopped pihole/pihole:latest
}

# Wait for the Docker daemon to be ready
wait_for_docker

# Check if the pihole_lan network exists
if is_network_existing "pihole_lan"; then
    echo "pihole_lan network already exists."
else
    create_pihole_lan_network
fi

# Check if dnsmasq container is running
if is_container_running "dnsmasq_lan"; then
    echo "dnsmasq container is already running."
else
    start_dnsmasq
fi

# Check if pihole container is running
if is_container_running "pihole_lan"; then
    echo "pihole container is already running."
else
    start_pihole
fi
sudo chmod +x /usr/local/bin/check_and_run_containers.sh
sudo vi /etc/init.d/docker_containers
#!/sbin/openrc-run

name="Docker Containers"
description="Ensure dnsmasq and pihole containers are running"

depend() {
    need docker
}

start() {
    ebegin "Checking and starting required Docker containers"
    /usr/local/bin/check_and_run_containers.sh
    eend $?
}
sudo chmod +x /etc/init.d/docker_containers
sudo rc-update add docker_containers default
sudo rc-service docker_containers start

Support

If you found this content valuable, please support my work here

License

This text is available under the Creative Commons Attribution-ShareAlike License