Putting your containers to sleep
lazytainerDemo.mp4
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.
- Clone the project
git clone https://github.com/vmorganp/Lazytainer cd Lazytainer
- Start the stack
This will create 2 containers that you can reach through a third "lazytainer" container
# if "docker compose" doesn't work, try "docker-compose" docker compose up
- View the running container by navigating to its web ui at
http://localhost:81
. You should see some information about the container - Close the tab and wait until the logs say "stopped container"
- Navigate again to
http://localhost:81
, it should be a dead page - Navigate to
http://localhost:81
several times, enough to generate some network traffic, and it should start - To clean up, run
docker-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