Docker container lazy loading
MIT License
Putting your containers to sleep
https://github.com/vmorganp/Lazytainer/assets/31448722/91af5528-6fee-4837-b4d8-11c03e792e94
Monitors network traffic to containers. If there is traffic, the container runs, otherwise the container is stopped/paused. for more details check out the Configuration section.
git clone https://github.com/vmorganp/Lazytainer
cd Lazytainer
# if "docker compose" doesn't work, try "docker-compose"
docker compose up
This will create 2 containers that you can reach through a third "lazytainer" containerhttp://localhost:81
. You should see some information about the containerhttp://localhost:81
, it should be a dead pagehttp://localhost:81
several times, enough to generate some network traffic, and it should startdocker-compose down
Lazytainer does not "automatically" start and stop all of your containers. You must apply a label to them and proxy their traffic through the Lazytainer container.
For examples of lazytainer in action, check out the Examples
Lazytainer starts and stops other containers in "groups" of one or more other containers. To assign a container to a lazytainer group, a label must be added. The label will look like this.
yourContainerThatWillSleep:
# ... configuration omitted for brevity
labels:
- "lazytainer.group=<yourGroupName>"
To configure a group, add labels to the lazytainer container like this. Note that each is required to have a port(s) specified. These ports must also be forwarded on the lazytainer container
lazytainer:
# ... configuration omitted for brevity
ports:
- 81:81 # used by group1 and group2
- 82:82 # used by group2
labels:
# Configuration items are formatted like this
- "lazytainer.group.<yourGroupName>.<property>=value"
# configuration for group 1
- "lazytainer.group.group1.ports=81"
# configuration for group 2
- "lazytainer.group.group2.ports=81,82"
Group properties that can be changed include:
Name | description | required | default |
---|---|---|---|
ports | Network ports associated with a group, can be comma separated. Should be the INTERNAL port, not the EXPOSED port. ex: service running on 8080 but exposed on 80 should have port set to 8080
|
Yes | n/a |
inactiveTimeout | Time (seconds) before container is stopped when there is insufficient network activity | No | 30 |
minPacketThreshold | Minimum count of network packets for container to be on | No | 30 |
ignoreActiveClients | Determine container activity based on only packet count, ignoring connected client count. | No | false |
pollRate | How frequently (seconds) to check network activity | No | 30 |
sleepMethod | How to put the container to sleep. Can be stop or pause
|
No | stop |
netInterface | Network interface to listen on | No | eth0 |
For more verbose logging, you can apply the environment variable VERBOSE=true
to lazytainer:
lazytainer:
# ... configuration omitted for brevity
environment:
- VERBOSE=true
To disable ipv4 or ipv6, pass environment variables:
lazytainer:
# ... configuration omitted for brevity
environment:
- IPV6_DISABLED=true
- IPV4_DISABLED=true
If using lazytainer, you MUST provide the following volume to lazytainer
lazytainer:
# ... configuration omitted for brevity
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro