mirror of
https://github.com/vmorganp/Lazytainer.git
synced 2025-12-21 13:23:02 +01:00
121 lines
5.3 KiB
Markdown
121 lines
5.3 KiB
Markdown
# Lazytainer - Lazy Load Containers
|
|
|
|
Putting your containers to sleep
|
|
[](https://github.com/vmorganp/Lazytainer/actions/workflows/release.yml)
|
|
|
|
---
|
|
|
|
https://github.com/vmorganp/Lazytainer/assets/31448722/91af5528-6fee-4837-b4d8-11c03e792e94
|
|
|
|
## Quick Explanation
|
|
|
|
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](##Configuration) section.
|
|
|
|
## Want to test it?
|
|
|
|
1. Clone the project
|
|
```
|
|
git clone https://github.com/vmorganp/Lazytainer
|
|
cd Lazytainer
|
|
```
|
|
2. Start the stack
|
|
```sh
|
|
# 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" container
|
|
3. View the running container by navigating to its web ui at `http://localhost:81`. You should see some information about the container
|
|
4. Close the tab and wait until the logs say "stopped container"
|
|
5. Navigate again to `http://localhost:81`, it should be a dead page
|
|
6. Navigate to `http://localhost:81` several times, enough to generate some network traffic, and it should start
|
|
7. To clean up, run
|
|
```sh
|
|
docker-compose down
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Note:
|
|
|
|
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.
|
|
|
|
### Examples
|
|
|
|
For examples of lazytainer in action, check out the [Examples](./examples/)
|
|
|
|
### Groups
|
|
|
|
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.
|
|
|
|
```yaml
|
|
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
|
|
|
|
```yaml
|
|
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` |
|
|
|
|
### Additional Configuration
|
|
|
|
#### Verbose Logging
|
|
|
|
For more verbose logging, you can apply the environment variable `VERBOSE=true` to lazytainer:
|
|
|
|
```yaml
|
|
lazytainer:
|
|
# ... configuration omitted for brevity
|
|
environment:
|
|
- VERBOSE=true
|
|
```
|
|
|
|
#### ipv4/ipv6 toggles
|
|
|
|
To disable ipv4 or ipv6, pass environment variables:
|
|
|
|
```yaml
|
|
lazytainer:
|
|
# ... configuration omitted for brevity
|
|
environment:
|
|
- IPV6_DISABLED=true
|
|
- IPV4_DISABLED=true
|
|
```
|
|
|
|
#### Volumes
|
|
|
|
If using lazytainer, you MUST provide the following volume to lazytainer
|
|
|
|
```yaml
|
|
lazytainer:
|
|
# ... configuration omitted for brevity
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
```
|